public void AddWeatherGraph(string cityName, string parameters, DateTime startTime, DateTime endTime, string graphName, WeatherType.ParameterEnum parameterType, int interval) { if (cityName == null || cityName == "") { throw new Exception("Please give a name of cities in Finland"); } Dictionary <string, IDataSeries> combined_graphs = new Dictionary <string, IDataSeries>(); try { TimeHandler.IsTimeValid(startTime, endTime); IsPlotNameValid(graphName); combined_graphs = FMI.GetAllData(startTime, endTime, interval, graphName, cityName, parameters, parameterType); } catch (AggregateException ae) { Console.WriteLine("FMIAction failed:"); foreach (var ex in ae.InnerExceptions) { Console.WriteLine(ex.Message); throw new Exception(ex.Message); } } foreach (var graph in combined_graphs) { graph.Value.Name = graphName + " (" + graph.Value.Name + ")"; DataPlot.Data.Add(graph.Value); } }
/* * Splits the FMI request, if it's too long and calls GetSingleData n times, where n * is number of splits. Combines all fetched graphs based on parameter * Returns a dictionary of combined graphs sorted by parameter. */ public static Dictionary <string, IDataSeries> GetAllData(DateTime startTime, DateTime endTime, int interval, string graphName, string cityName, string parameters, WeatherType.ParameterEnum parameterType) { // This dict is returned Dictionary <string, IDataSeries> combined_graphs = new Dictionary <string, IDataSeries>(); if (TimeHandler.ForecastTooFar(startTime)) { return(combined_graphs); } string step = interval.ToString(); Timestep = step; if (TimeHandler.DataTooBig(startTime, endTime, interval)) { return(combined_graphs); } List <Tuple <DateTime, DateTime> > timepairs = TimeHandler.SplitFMIRequest(startTime, endTime); foreach (var timepair in timepairs) { StartTime = TimeHandler.ConvertToLocalTime(timepair.Item1).ToString("yyyy-MM-ddTHH:mm:ssZ"); EndTime = TimeHandler.ConvertToLocalTime(timepair.Item2).ToString("yyyy-MM-ddTHH:mm:ssZ"); Place = cityName; Parameters = parameters; string query; if (parameterType == WeatherType.ParameterEnum.Forecast) { query = BuildQuery("forecast::hirlam::surface::point"); } else { query = BuildQuery("observations::weather"); } string request = BuildRequest(query); Console.WriteLine(request); // This flag makes sure that the missing graphs warning is shown only once bool is_first = false; if (timepairs.First() == timepair) { is_first = true; } var series_list_task = Task.Run(() => GetSingleData(request, is_first)); series_list_task.Wait(); var series_list = series_list_task.Result; foreach (var series in series_list) { AddToDict(ref combined_graphs, series); } } return(combined_graphs); }
public List <WeatherType> GetUpdatedWeatherTypes(WeatherType.ParameterEnum weatherParameter) { return(WeatherTypes.FindAll(weatherType => weatherType.ParameterType == weatherParameter)); }