diff --git a/src/main/java/ru/dima/weather/WeatherApp.java b/src/main/java/ru/dima/weather/WeatherApp.java index 0f3e987..18ece81 100644 --- a/src/main/java/ru/dima/weather/WeatherApp.java +++ b/src/main/java/ru/dima/weather/WeatherApp.java @@ -1,12 +1,17 @@ package ru.dima.weather; -import ru.dima.weather.city.CityByIpResolver; +import ru.dima.weather.city.IpInfoService; +import ru.dima.weather.city.IpProvider; +import ru.dima.weather.city.IpProviderCLISelector; +import ru.dima.weather.city.IpProviderRegistry; import ru.dima.weather.cli.CLIInputReader; import ru.dima.weather.cli.WeatherProviderCLISelector; import ru.dima.weather.http.HttpRequester; import ru.dima.weather.provider.OpenWeatherMapWeatherProvider; import ru.dima.weather.provider.WeatherProviderRegistry; +import java.util.ArrayList; + /* 1. Брать текущий IP 2. Определять город по текущему IP @@ -16,16 +21,20 @@ public class WeatherApp { public static void main(String[] args) { var httpRequester = new HttpRequester(); - var cityByIpResolver = new CityByIpResolver(httpRequester); var weatherProviderRegistry = new WeatherProviderRegistry(); + IpProviderRegistry ipProviderRegistry = new IpProviderRegistry(); + IpInfoService ipInfoService = new IpInfoService(httpRequester); + + IpProviderCLISelector ipProviderCLISelector = new IpProviderCLISelector(new CLIInputReader(System.in), ipProviderRegistry.registerWeatherProvider(ipInfoService)); + ipProviderCLISelector.selectIpProviderFromCLI(); + var openWeatherMapProvider = new OpenWeatherMapWeatherProvider(httpRequester, "29ed5ca47c3d0c32385b18f1e82e522f"); weatherProviderRegistry.registerWeatherProvider(openWeatherMapProvider); var weatherProviderCliSelector = new WeatherProviderCLISelector(new CLIInputReader(System.in), weatherProviderRegistry); var weatherProviderSelectedByUser = weatherProviderCliSelector.selectWeatherProviderFromCLI(); - System.out.println(weatherProviderSelectedByUser.getWeeklyWeatherInCity(cityByIpResolver.getCurrentCityViaIP())); // System.out.println(openWeatherMapProvider.getWeeklyWeatherInCity(cityByIpResolver.getCurrentCityViaIP())); } diff --git a/src/main/java/ru/dima/weather/city/IpInfoService.java b/src/main/java/ru/dima/weather/city/IpInfoService.java new file mode 100644 index 0000000..caeb255 --- /dev/null +++ b/src/main/java/ru/dima/weather/city/IpInfoService.java @@ -0,0 +1,24 @@ +package ru.dima.weather.city; + +import ru.dima.weather.http.HttpRequester; + +import static ru.dima.weather.city.IpInfoService.IP_INFO_URL; + +public class IpInfoService implements IpProvider { + public static final String IP_INFO_URL = "https://ipinfo.io/city"; + private HttpRequester httpRequester; + + public IpInfoService (HttpRequester httpRequester) { + this.httpRequester = httpRequester; + } + @Override + public String getCurrentCityViaIP() { + return httpRequester.getString(IP_INFO_URL) + .replace("\n", "") + .replace("\r", ""); + } + @Override + public String getName(){ + return "ipinfo"; + } +} diff --git a/src/main/java/ru/dima/weather/city/IpProviderCLISelector.java b/src/main/java/ru/dima/weather/city/IpProviderCLISelector.java new file mode 100644 index 0000000..efe3ddd --- /dev/null +++ b/src/main/java/ru/dima/weather/city/IpProviderCLISelector.java @@ -0,0 +1,28 @@ +package ru.dima.weather.city; + +import ru.dima.weather.cli.CLIInputReader; + +import java.util.List; + +public class IpProviderCLISelector { + private CLIInputReader cliInputReader; + private List ipProviders; + public IpProviderCLISelector(CLIInputReader cliInputReader, List ipProviders) { + this.cliInputReader = cliInputReader; + this.ipProviders = ipProviders; + } + + public IpProvider selectIpProviderFromCLI() { + System.out.println("Выберите сервис для получения вашего города через ip:"); + for(int i = 0; i < ipProviders.size(); i ++){ + System.out.println((i + 1) + ". " + ipProviders.get(i).getName()); + } + int sks = cliInputReader.readInteger(); + while (sks < 1 || sks > ipProviders.size()) { + System.out.println("Такого варианта нет. Побробуйте еще раз"); + sks = cliInputReader.readInteger(); + } + return ipProviders.get(sks - 1); + + } +} diff --git a/src/main/java/ru/dima/weather/city/IpProviderRegistry.java b/src/main/java/ru/dima/weather/city/IpProviderRegistry.java new file mode 100644 index 0000000..db594b8 --- /dev/null +++ b/src/main/java/ru/dima/weather/city/IpProviderRegistry.java @@ -0,0 +1,15 @@ +package ru.dima.weather.city; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class IpProviderRegistry { + + private List registerIpProvider = new ArrayList<>(); + + public List registerWeatherProvider(IpProvider ipProvider) { + registerIpProvider.add(ipProvider); + return Collections.unmodifiableList(registerIpProvider); + } +}