// Having more time I would redesign it. There is an option to get JSon format. I would have to try it somehow...
        public async Task <bool> ValidateRouteFound(RouteCalculationRequestData routeCalculationRequestData)
        {
            var queryString = this.googleRoutesExistenceQueryProvider.GetRoutesQuery(routeCalculationRequestData);

            var ds = new DataSet();

            HttpWebRequest request;
            WebResponse    response = null;

            try
            {
                request  = (HttpWebRequest)WebRequest.Create(queryString);
                response = await Task <WebResponse> .Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, request);

                var dataStream = response.GetResponseStream();

                var reader         = new StreamReader(dataStream);
                var responsereader = reader.ReadToEnd();
                ds.ReadXml(new XmlTextReader(new StringReader(responsereader)));
            }
            catch (Exception ex)
            {
                log.Error("GoogleLocationsDataProvider could not fetch data from google maps api", ex);
            }
            finally
            {
                response?.Close();
            }

            var status = ds.Tables["DirectionsResponse"].Rows[0]["status"];

            return(status.ToString().ToUpper() != "NOT_FOUND");
        }
Beispiel #2
0
        private string[] GetLocationsFromCalculationRequestData(RouteCalculationRequestData routeCalculationRequestData)
        {
            List <string> list = new List <string>();

            list.Add(routeCalculationRequestData.RouteFrom.Name);
            list.Add(routeCalculationRequestData.RouteTo.Name);
            foreach (var viaStrop in routeCalculationRequestData.ViaStops)
            {
                list.Add(viaStrop.Name);
            }

            return(list.Where(x => !string.IsNullOrEmpty(x)).ToArray());
        }
        public string GetRoutesQuery(RouteCalculationRequestData routeCalculationRequestData)
        {
            var waypoints = string.Empty;

            if (routeCalculationRequestData.ViaStops != null && routeCalculationRequestData.ViaStops.Any())
            {
                waypoints = string.Join(",", routeCalculationRequestData.ViaStops.Select(x => HttpUtility.UrlEncode(x.Name)).ToArray());
            }

            var retUrl = string.Format(this.settingsProvider.Settings.DirectionsCheckTemplateUrl,
                                       HttpUtility.UrlEncode(routeCalculationRequestData.RouteFrom.Name),
                                       HttpUtility.UrlEncode(routeCalculationRequestData.RouteTo.Name),
                                       this.settingsProvider.Settings.GoogleKey,
                                       waypoints);

            return(retUrl);
        }
Beispiel #4
0
        private bool ValidateRoutesFound(RouteCalculationRequestData routeCalculationRequestData)
        {
            bool isValid = false;

            var task = Task.Run(async() => await this.routesExistenceValidator.ValidateRouteFound(routeCalculationRequestData));

            // This needs to be discussed
            isValid = task.Result;

            if (!isValid)
            {
                this.IsErrorMessageVisible = true;

                // Of course strings should be in resources, localizable.
                this.ErrorMessage = "Der Weg nicht gefunden.";
                return(false);
            }

            this.IsErrorMessageVisible = false;
            this.ErrorMessage          = string.Empty;
            return(true);
        }
Beispiel #5
0
        private void Calculate()
        {
            if (!this.ValidateCalculationRequest())
            {
                return;
            }

            var routeCalculationRequestData = new RouteCalculationRequestData();

            routeCalculationRequestData.RouteFrom = new LocationData()
            {
                Name = this.RouteFrom
            };
            routeCalculationRequestData.RouteTo = new LocationData()
            {
                Name = this.RouteTo
            };
            routeCalculationRequestData.ViaStops = this.viaStops.Where(x => !string.IsNullOrEmpty(x.Name)).ToArray();

            if (!this.ValidateRoutesFound(routeCalculationRequestData))
            {
                return;
            }

            this.eventAggregator.GetEvent <RouteCalculationRequestEvent>().Publish(routeCalculationRequestData);
            if (this.settingsProvider.Settings.UseLocalSearchRepository)
            {
                var locationsToInsertToRepository =
                    this.GetLocationsFromCalculationRequestData(routeCalculationRequestData);

                if (this.locationsRepository.MemorizeLocations(locationsToInsertToRepository))
                {
                    this.eventAggregator.GetEvent <LocationsSetChangedEvent>().Publish(locationsRepository.GetLocations());
                }
            }
        }