Добавлена система выбора сервиса ip (пока что без теста)
This commit is contained in:
parent
75dce5f3c2
commit
3d24d54091
@ -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()));
|
||||
}
|
||||
|
24
src/main/java/ru/dima/weather/city/IpInfoService.java
Normal file
24
src/main/java/ru/dima/weather/city/IpInfoService.java
Normal file
@ -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";
|
||||
}
|
||||
}
|
@ -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<IpProvider> ipProviders;
|
||||
public IpProviderCLISelector(CLIInputReader cliInputReader, List<IpProvider> 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);
|
||||
|
||||
}
|
||||
}
|
15
src/main/java/ru/dima/weather/city/IpProviderRegistry.java
Normal file
15
src/main/java/ru/dima/weather/city/IpProviderRegistry.java
Normal file
@ -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 <IpProvider> registerIpProvider = new ArrayList<>();
|
||||
|
||||
public List<IpProvider> registerWeatherProvider(IpProvider ipProvider) {
|
||||
registerIpProvider.add(ipProvider);
|
||||
return Collections.unmodifiableList(registerIpProvider);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user