// 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"); }
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); }
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); }
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()); } } }