Example #1
0
        public object Validate([FromQuery] string validateArr)
        {
            var Parameters = JsonConvert.DeserializeObject <List <ParameterForValidate> >(validateArr);

            List <object> parametersCorrect = new List <object>();
            bool          resultVerification;
            string        message;

            foreach (var parameter in Parameters)
            {
                if (StaticData.CurrentSystems.ParametersWithEnter.TryGetValue(parameter.parameterName, out ParameterWithEnter parameterWithEnter))
                {
                    parameterWithEnter.Value = parameter.value;
                    resultVerification       = parameterWithEnter.Verification(out message);

                    if (!resultVerification)
                    {
                        QueryResponse.AddNegativeMessage(message);
                    }

                    parametersCorrect.Add(new
                    {
                        parameterName = parameter.parameterName.GetName(),
                        Correct       = resultVerification
                    });
                }
            }

            QueryResponse.Add("parametersCorrect", parametersCorrect);
            return(QueryResponse.ToResult());
        }
Example #2
0
 public object GetParametersForAnalysis()
 {
     QueryResponse.Add("ParametersForAnalysis", StaticData.CurrentSystems.GetParametersForAnalysis(out List <string> message));
     QueryResponse.AddNegativeMessages(message, true);
     QueryResponse.Add("U", StaticData.CurrentSystems.GetParameterU(out string result));
     QueryResponse.Add("result", result);
     return(QueryResponse.ToResult());
 }
Example #3
0
        private void tidiedData(Query q, XmlDocument objXmlDocument)
        {
            // Only deal with one page for now (I think there is only one)
            _bMoreResults = false;

            // Grab sub frame
            XmlNodeList objNodeListRetailerNames = objXmlDocument.SelectNodes("/html/body/div/table/tr/td/table/tr/td/table/tr/td/a[@href!='/retailers']");
            XmlNodeList objNodeListDistances     = objXmlDocument.SelectNodes("/html/body/div/table/tr/td/table/tr/td/table/tr/td/a[@href!='/retailers']/../../td[@class='indent'][@align='right']");

            // Check
            if (objNodeListDistances == null || objNodeListRetailerNames == null)
            {
                throw new Exception("Big problems - can't extract data");
            }

            for (int i = 0; i < objNodeListRetailerNames.Count; i++)
            {
                string strURL      = TidyString(objNodeListRetailerNames[i].Attributes["href"].Value);
                string strName     = TidyString(objNodeListRetailerNames[i].InnerText);
                string strDistance = TidyString(objNodeListDistances[i].InnerText);

                // CHANGE: Need a better way to extract ID
                string strID = strURL.Substring(strURL.IndexOf("dealer_no=") + 10);

                QueryResponse objResponse = new QueryResponse();

                objResponse.Add("URL", "http://" + Domain + strURL);
                objResponse.Add("NAME", strName);
                objResponse.Add("DISTANCE", strDistance);
                objResponse.Add("ID", strID);

                _arrResponses.Add(objResponse);
            }

            // Go get next set of data ?
            if (_bMoreResults)
            {
                doQuery();
            }

            if (OnResults != null)
            {
                OnResults(this, Responses);
            }
        }
        public object GetParameters()
        {
            var ParametersWithEnter       = HelperEnum.GetValuesWithoutDefault <NameParameterWithEnter>().Where(x => !StaticData.ConditionsForParameterWithEnter.ContainsKey(x)).Select(x => x.ToJson());
            var ParametersWithCalculation = HelperEnum.GetValuesWithoutDefault <NameParameterWithCalculation>().Where(x => !StaticData.ConditionsForParameterWithCalculation.ContainsKey(x)).Select(x => x.ToJson());

            //var ParametersForAnalysis = HelperEnum.GetValuesWithoutDefault<NameParameterForAnalysis>().Where(x => !StaticData.ConditionsForParameterForAnalysis.ContainsKey(x)).Select(x => x.ToJson());
            QueryResponse.Add("Properties", ParametersWithEnter.Union(ParametersWithCalculation));

            return(QueryResponse.ToResult());
        }
        public object AddRestriction(string parameter = null, string condition = null, string value = null)
        {
            ConditionType conditionValue = ConditionType.NoCorrect;
            double        Value          = 0;

            if (string.IsNullOrEmpty(value))
            {
                QueryResponse.AddNegativeMessage("Значение ограничения не указано");
            }
            else
            {
                if (!double.TryParse(value, out Value))
                {
                    QueryResponse.AddNegativeMessage(String.Format("Указанное значение \"{0}\" не является числом", value));
                }
                else if (!(Value > 0))
                {
                    QueryResponse.AddNegativeMessage("Значение ограничения должно быть > 0");
                }
            }

            if (string.IsNullOrEmpty(condition))
            {
                QueryResponse.AddNegativeMessage("Условие для ограничения не указано");
            }
            else
            {
                HelperEnum.TryGetValue <ConditionType>(condition, out conditionValue);

                if (HelperEnum.IsDefault(conditionValue))
                {
                    QueryResponse.AddNegativeMessage(String.Format("Условие типа \"{0}\" не найдено", condition));
                }
            }

            if (string.IsNullOrEmpty(parameter))
            {
                QueryResponse.AddNegativeMessage("Параметр для ограничения не указан");
            }
            else
            {
                var result = ParameterUniversal.AddToRestriction(parameter, conditionValue, Value, QueryResponse.IsSuccess, out bool correct);

                if (QueryResponse.IsSuccess)
                {
                    QueryResponse.Add(result);
                }
                else if (!correct)
                {
                    QueryResponse.AddNegativeMessage(String.Format("Параметр с именем \"{0}\" не найден", parameter));
                }
            }

            return(QueryResponse.ToResult());
        }
Example #6
0
        public object GetCalculationForDiagram([FromQuery] string queryString)
        {
            ParameterForCalculationDiagram parameterForCalculationDiagram = ValidateDiagram(queryString);

            if (QueryResponse.IsSuccess)
            {
                DiagramCalculationResult diagramCalculationResult = new DiagramCalculationResult();
                diagramCalculationResult.calculations = new List <DiagramCalculation>();
                foreach (var nameSystem in parameterForCalculationDiagram.namesSystems)
                {
                    diagramCalculationResult.calculations.Add(new DiagramCalculation(StaticData.Systems[nameSystem].GetParameterValue(parameterForCalculationDiagram.parameterName), nameSystem));
                }
                diagramCalculationResult.parameterName = StaticData.CurrentSystems.GetParameterDesignation(parameterForCalculationDiagram.parameterName);
                StaticData.DiagramCalculation          = diagramCalculationResult;
                QueryResponse.Add("ParameterName", diagramCalculationResult.parameterName);
                QueryResponse.Add("Calculations", diagramCalculationResult.calculations);
            }
            return(QueryResponse.ToResult());
        }
Example #7
0
        public object GetCalculationForChart([FromQuery] string queryString)
        {
            ParameterForCalculationChart parameterForCalculationChart = ValidateChart(queryString);

            if (QueryResponse.IsSuccess)
            {
                ChartCalculationResult chartCalculationResult = new ChartCalculationResult();
                chartCalculationResult.calculations = new List <ChartCalculation>();
                foreach (var nameSystem in parameterForCalculationChart.namesSystems)
                {
                    chartCalculationResult.calculations.Add(StaticData.Systems[nameSystem].GetCalculationsForChart(parameterForCalculationChart));
                }
                chartCalculationResult.parameterNameX = StaticData.CurrentSystems.GetParameterDesignation(parameterForCalculationChart.parameterName);
                chartCalculationResult.parameterNameY = StaticData.CurrentSystems.GetParameterDesignation("U");

                StaticData.ChartCalculation = chartCalculationResult;

                QueryResponse.Add("ParameterNameX", chartCalculationResult.parameterNameX);
                QueryResponse.Add("ParameterNameY", chartCalculationResult.parameterNameY);
                QueryResponse.Add("Calculations", chartCalculationResult.calculations.Select(x => x.ToObject()));
            }
            return(QueryResponse.ToResult());
        }
Example #8
0
        private void tidiedData(Query q, XmlDocument objXmlDocument)
        {
            // Grab sub frame
            XmlNode objNodeIndex = objXmlDocument.SelectSingleNode("/html/frameset/frameset/frame[@name='PFC']");

            // Are we in the main page - i.e. do we need to jump into the sub-frame ?
            if (objNodeIndex != null)
            {
                if (objNodeIndex.Attributes["src"] != null)
                {
                    _strSubFrameQuery = objNodeIndex.Attributes["src"].Value + "&page=" + ++_iPageNo;

                    objXmlDocument = GetTidiedData(_strSubFrameQuery);
                }
            }

            // Increment the page number and do the query again with a sub-frame query
            // FIXME: Do this better
            _strSubFrameQuery = _strSubFrameQuery.Replace("page=" + _iPageNo, "page=" + ++_iPageNo);

            // Grab images
            XmlNodeList objNodeListImages  = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a");
            XmlNodeList objNodeListDate    = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[3]");
            XmlNodeList objNodeListMileage = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[4]");
            XmlNodeList objNodeListColor   = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[5]");
            XmlNodeList objNodeListPrice   = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[6]");
            XmlNode     objNextNode        = objXmlDocument.SelectSingleNode("/html/body/form/table/tr/td/table/tr/td/table/tr/td/p/a[@title='Next Page']");

            if (objNextNode != null)
            {
                _bMoreResults = true;
            }
            else
            {
                _bMoreResults = false;
            }

            for (int i = 0; i < objNodeListImages.Count; i++)
            {
                string strPicURL    = TidyString("/" + objNodeListImages[i].Attributes["href"].Value).Trim();
                string strShortform = TidyString(objNodeListImages[i].InnerText).Trim();
                string strDate      = TidyString(objNodeListDate[i].InnerText).Trim();
                string strMileage   = TidyString(objNodeListMileage[i].InnerText).Trim();
                string strColor     = TidyString(objNodeListColor[i].InnerText).Trim();
                string strPrice     = TidyString(objNodeListPrice[i].InnerText).Trim();

                QueryResponse objResponse = new QueryResponse();

                Uri objUri = new Uri(_strSubFrameQuery);

                objResponse.Add("INFOURL", "http://" + objUri.Host + strPicURL);
                objResponse.Add("DETAILS", strShortform);
                objResponse.Add("DATE", strDate);
                objResponse.Add("MILEAGE", strMileage);
                objResponse.Add("COLOR", strColor);
                objResponse.Add("PRICE", strPrice);

                _arrResponses.Add(objResponse);
            }

            // Go get next set of data ?
            if (_bMoreResults)
            {
                doQuery();
            }

            if (OnResults != null)
            {
                OnResults(this, Responses);
            }
        }
 public object GetRestrictions()
 {
     QueryResponse.Add("Restrictions", ParameterUniversal.GetRestrictions().Select(x => x.ToResponse()));
     return(QueryResponse.ToResult());
 }
 public object GetConditions()
 {
     QueryResponse.Add("Conditions", HelperEnum.GetValuesWithoutDefault <ConditionType>().Select(x => x.ToJson()));
     return(QueryResponse.ToResult());
 }
Example #11
0
        public object GetParametersForDiagram()
        {
            QueryResponse.Add("ParametersForDiagram", StaticData.CurrentSystems.GetParametersForDiagram());

            return(QueryResponse.ToResult());
        }
Example #12
0
        public object GetSystems()
        {
            QueryResponse.Add("Systems", StaticData.Systems.Keys.ToList());

            return(QueryResponse.ToResult());
        }
Example #13
0
 public object GetParametersWithCalculate()
 {
     QueryResponse.Add("ParametersWithCalculate", StaticData.CurrentSystems.GetParametersWithCalculate(out List <string> message));
     QueryResponse.AddNegativeMessages(message, true);
     return(QueryResponse.ToResult());
 }
Example #14
0
 public object GetParametersWithEnter()
 {
     QueryResponse.Add("ParametersWithEnter", StaticData.CurrentSystems.GetParametersWithEnter(out List <string> message));
     QueryResponse.AddWarningMessages(message, true);
     return(QueryResponse.ToResult());
 }
        private void tidiedData(Query q, XmlDocument objXmlDocument)
        {
            // Grab results number
            XmlNode objNodeIndex = objXmlDocument.SelectSingleNode("/html/body/div/table[2]/tr[1]/td[1]/b");
            string  strIndex     = objNodeIndex.InnerText;

            string[] strIndexInfo = strIndex.Split(new char[] { ' ' });

            int iFirstResult;
            int iLastResult;
            int iTotalResults;

            iFirstResult  = int.Parse(strIndexInfo[1]);
            iLastResult   = int.Parse(strIndexInfo[3]);
            iTotalResults = int.Parse(strIndexInfo[5]);

            if (iTotalResults == MAX_RECORDS)
            {
                // FIXME: Throw an exception ?
                Debug.WriteLine("Warning: returned record count is equal to MAX_RECORDS. Query is too general");
            }

            if (iLastResult < iTotalResults)
            {
                _bMoreResults = true;
            }

            // Grab list from this page
            XmlNodeList objNodeShortformList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td/b/a");
            XmlNodeList objNodeLongformList  = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='listAdTextAreaPhoto']");
            XmlNodeList objNodePriceList     = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='priceCol']/b");
            XmlNodeList objNodePicList       = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='photoColWithPhoto']");
            XmlNodeList objMoreInfoList      = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td/b/a/@href");

            for (int i = 0; i < objNodeLongformList.Count; i++)
            {
                QueryResponse objResponse = new QueryResponse();

                string  strPicURL;
                XmlNode objNode = objNodePicList[i]["img"];
                if (objNode != null)
                {
                    strPicURL = objNode.Attributes["src"].Value;
                }
                else
                {
                    strPicURL = "";
                }

                string strShortform = objNodeShortformList[i].InnerText;
                string strLongform  = objNodeLongformList[i].InnerText;

                string [] strMoreInfoElements = objMoreInfoList[i].Value.Split(new char[] { ',', '(', ')' });

                string strAdID = strMoreInfoElements[1];
                string strDist = strMoreInfoElements[2];
                string strCat  = strMoreInfoElements[3];
                string strPos  = strMoreInfoElements[4];

                string strURL = "http://" + _strDomain + "/WWW/CARS_popup.asp?modelexact=1&lid=search_used_cars_full&make=ANY&model=ANY&min_pr=500&max_pr=&mileage=&agerange=&postcode=L23%203DP&miles=10&max_records=&source=2&photo=1&sort=4&ukcarsearch_full=SEARCH&start="
                                + strPos + "&distance=" + strDist + "&adcategory=" + strCat +
                                "&channel=CARS&id=" + strAdID;

                // Knock out all superfluous spaces
                while (strShortform.IndexOf("  ") >= 0)
                {
                    strShortform = strShortform.Replace("  ", " ");
                }
                while (strLongform.IndexOf("  ") >= 0)
                {
                    strLongform = strLongform.Replace("  ", " ");
                }

                // Knock out new lines
                strShortform = strShortform.Replace("\r\n", "");
                strLongform  = strLongform.Replace("\r\n", "");

                string strNodePrice = objNodePriceList[i].InnerText;
                strNodePrice = strNodePrice.Replace(",", "");

#if false
                Debug.WriteLine("Got: " + strPicURL + ", " + strLongform + ", " + strNodePrice);
#endif

                objResponse.Add("PictureURL", strPicURL);
                objResponse.Add("ShortForm", strShortform);
                objResponse.Add("Details", strLongform);
                objResponse.Add("Price", strNodePrice);
                objResponse.Add("MoreInfoURL", strURL);

                _arrResponses.Add(objResponse);
            }

            // Go get next set of data ?
            if (_bMoreResults)
            {
                _iPageNo++;

                // Increment the page number and do the query again
                doQuery();
            }

            if (OnResults != null)
            {
                OnResults(this, Responses);
            }
        }