예제 #1
0
        List <string> IForecastStrategy.GetForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result = new List <string>();

            for (int fourteenDayCounter = 0; fourteenDayCounter < 14; fourteenDayCounter++)
            {
                result = _weatherForecast.GetFourteenDayWeatherForecast(zipcode, temperatureStrategy, date.AddDays(fourteenDayCounter));
            }
            return(result);
        }
        List <string> IForecastStrategy.GetForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result = new List <string>();

            try
            {
                result = _weatherForecast.GetThreeDayWeatherForecast(zipcode, temperatureStrategy, date);
            }
            catch
            {
            }
            return(result);
        }
예제 #3
0
        List <string> IForecastStrategy.GetForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result = new List <string>();

            try
            {
                result.Add(_weatherForecast.GetWeatherForecastForZip(zipcode, temperatureStrategy, date));
            }
            catch
            {
                //ToDo Logging
                throw;
            }
            return(result);
        }
예제 #4
0
        public List <string> GetHourlyWeatherForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result     = new List <string>();
            var           hourlyData = Task.Run(() => _weatherForecastProvider.GetHourlyWeather(zipcode));

            hourlyData.Wait();
            HourlyValuesDomainModel model = hourlyData.Result;

            foreach (var hour in model.HourlyValues)
            {
                TemperatureInfo temperatureInfo    = temperatureStrategy.GetTemperatureFromKelvin(hour.Temperature);
                double          roundedTemperature = Math.Round(temperatureInfo.Temperature);
                result.Add($"In {zipcode} hat es am {hour.Time.ToString("dd/MM/yyyy, HH:mm")} Uhr {roundedTemperature} {temperatureInfo.Display} und es ist {hour.WeatherDescription}");
            }

            return(result);
        }
예제 #5
0
        public string GetWeatherForecastForZip(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            //ToDo: Get API Key from Settings
            // Use DI here instead of creating OpenWeatherAPI here ( Provider can be easily changed later)
            // OpenWeatherAPI openWeatherAPI = new OpenWeatherAPI(_httpClient, "a1fcc507923163ff1bae113a80d8f82a");
            var data = Task.Run(() => _weatherForecastProvider.GetCurrentWeather(zipcode));

            data.Wait();
            CurrentWeatherDomainModel model = data.Result;

            float           temperatureKelvin  = model.Temperature;
            string          cloudiness         = model.WeatherDescription;
            TemperatureInfo temperatureInfo    = temperatureStrategy.GetTemperatureFromKelvin(temperatureKelvin);
            double          roundedTemperature = Math.Round(temperatureInfo.Temperature);

            return($"In {zipcode} hat es am {date.ToString("d")} {roundedTemperature} {temperatureInfo.Display} und es ist {cloudiness}" + Environment.NewLine);
        }
예제 #6
0
        public List <string> GetForecast(
            int zipcode,
            DateTime date,
            TemperatureTypeEnum temperatureType,
            ForecastTypeEnum forecastType)
        {
            try
            {
                CheckParametersValid(zipcode, date, temperatureType, forecastType);
            }
            catch (ArgumentException ae)
            {
                //ToDo Fehlermeldung an UI
            }

            // = "Orchestrierung", ruft Methoden auf ohne zu wissen, woher bspw. Parameter herkommen
            // Funktionales Programmieren
            _temperatureStrategy = TemperatureStrategyFactory.GetTemperatureStrategy(temperatureType);
            // Exercise: New Provider (e.g. Random) and change next Line to see if it still work
            IWeatherForecastProvider weatherForecastProvider = new OpenWeatherAPI(HttpClientFactory.CreateClient(), "a1fcc507923163ff1bae113a80d8f82a");
            WeatherForecast          weatherForecast         = new WeatherForecast(weatherForecastProvider);

            _forecastStrategy = ForecastStrategyFactory.GetForecastStrategy(forecastType, weatherForecast);
            List <string> result = new List <string>();

            try
            {
                result = _forecastStrategy.GetForecast(zipcode, _temperatureStrategy, date);
            }
            catch (ZipNotFoundException ex)
            {
                result.Add(ex.Message);
            }
            catch (Exception ex)
            {
                result.Add($"Exception: {ex.Message}");
            }
            return(result);
        }
예제 #7
0
        public List <string> GetThreeDayWeatherForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result       = new List <string>();
            var           threeDayData = Task.Run(() => _weatherForecastProvider.GetWeatherForThreeDays(zipcode));

            threeDayData.Wait();
            ThreeDayValuesDomainModel model = threeDayData.Result;

            foreach (var day in model.ThreeDayValues)
            {
                TemperatureInfo MorningTemperatureInfo    = temperatureStrategy.GetTemperatureFromKelvin(day.DailyMorningTemperature);
                double          roundedMorningTemperature = Math.Round(MorningTemperatureInfo.Temperature);
                TemperatureInfo DayTemperatureInfo        = temperatureStrategy.GetTemperatureFromKelvin(day.DailyDayTemperature);
                double          roundedDayTemperature     = Math.Round(DayTemperatureInfo.Temperature);
                TemperatureInfo EveningTemperatureInfo    = temperatureStrategy.GetTemperatureFromKelvin(day.DailyEveningTemperature);
                double          roundedEveningTemperature = Math.Round(EveningTemperatureInfo.Temperature);
                result.Add($"In {zipcode} hat es am {day.Time.ToString("d")} morgens {roundedMorningTemperature} {MorningTemperatureInfo.Display} und es ist {day.WeatherDescription}");
                result.Add($"In {zipcode} hat es am {day.Time.ToString("d")} mittags {roundedDayTemperature} {DayTemperatureInfo.Display} und es ist {day.WeatherDescription}");
                result.Add($"In {zipcode} hat es am {day.Time.ToString("d")} mittags {roundedEveningTemperature} {EveningTemperatureInfo.Display} und es ist {day.WeatherDescription}");
            }

            return(result);
        }
예제 #8
0
        public List <string> GetFourteenDayWeatherForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
        {
            List <string> result          = new List <string>();
            var           fourteenDayData = Task.Run(() => _weatherForecastProvider.GetWeatherForFourteenDays(zipcode));

            fourteenDayData.Wait();
            FourteenDayValuesDomainModel model = fourteenDayData.Result;

            foreach (var day in model.FourteenDayValues)
            {
                if (day.WeatherDescription == "Empty Data")
                {
                    result.Add("Keine Wetterdaten vorhanden");
                }
                else
                {
                    TemperatureInfo temperatureInfo    = temperatureStrategy.GetTemperatureFromKelvin(day.Temperature);
                    double          roundedTemperature = Math.Round(temperatureInfo.Temperature);
                    result.Add($"In {zipcode} hat es am {day.Time.ToString("d")} {roundedTemperature} {temperatureInfo.Display} und es ist {day.WeatherDescription}");
                }
            }

            return(result);
        }
 public List <string> GetForecast(int zipcode, ITemperatureStrategy temperatureStrategy, DateTime date)
 {
     return(_weatherForecast.GetHourlyWeatherForecast(zipcode, temperatureStrategy, date));
 }