feature: added CLI interface
This commit is contained in:
parent
66b0b821f6
commit
929e686698
@ -1,8 +1,15 @@
|
|||||||
package ru.dima.weather;
|
package ru.dima.weather;
|
||||||
|
|
||||||
import ru.dima.weather.city.CityByIpResolver;
|
import ru.dima.weather.city.CityByIpResolver;
|
||||||
|
import ru.dima.weather.cli.CLIInputReader;
|
||||||
|
import ru.dima.weather.cli.WeatherProviderCLISelector;
|
||||||
import ru.dima.weather.http.HttpRequester;
|
import ru.dima.weather.http.HttpRequester;
|
||||||
import ru.dima.weather.provider.OpenWeatherMapWeatherProvider;
|
import ru.dima.weather.provider.OpenWeatherMapWeatherProvider;
|
||||||
|
import ru.dima.weather.provider.WeatherProvider;
|
||||||
|
import ru.dima.weather.provider.WeatherProviderRegistry;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
1. Брать текущий IP
|
1. Брать текущий IP
|
||||||
@ -14,9 +21,16 @@ public class WeatherApp {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
var httpRequester = new HttpRequester();
|
var httpRequester = new HttpRequester();
|
||||||
var cityByIpResolver = new CityByIpResolver(httpRequester);
|
var cityByIpResolver = new CityByIpResolver(httpRequester);
|
||||||
System.out.println(cityByIpResolver.getCurrentCityViaIP());
|
var weatherProviderRegistry = new WeatherProviderRegistry();
|
||||||
|
|
||||||
var openWeatherMapProvider = new OpenWeatherMapWeatherProvider(httpRequester, "29ed5ca47c3d0c32385b18f1e82e522f");
|
var openWeatherMapProvider = new OpenWeatherMapWeatherProvider(httpRequester, "29ed5ca47c3d0c32385b18f1e82e522f");
|
||||||
System.out.println(openWeatherMapProvider.getWeeklyWeatherInCity(cityByIpResolver.getCurrentCityViaIP()));
|
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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
src/main/java/ru/dima/weather/cli/CLIInputReader.java
Normal file
36
src/main/java/ru/dima/weather/cli/CLIInputReader.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package ru.dima.weather.cli;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
public class CLIInputReader {
|
||||||
|
private BufferedReader scanner;
|
||||||
|
|
||||||
|
public CLIInputReader(InputStream systemIn) {
|
||||||
|
this.scanner = new BufferedReader(new InputStreamReader(systemIn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String readString() {
|
||||||
|
try {
|
||||||
|
return scanner.readLine();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int readInteger() {
|
||||||
|
try {
|
||||||
|
var inputString = readString();
|
||||||
|
if (inputString == null) {
|
||||||
|
throw new IllegalStateException("IO Closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(inputString);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println("Попробуй еще раз, это не число");
|
||||||
|
return readInteger();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package ru.dima.weather.cli;
|
||||||
|
|
||||||
|
import ru.dima.weather.provider.WeatherProvider;
|
||||||
|
import ru.dima.weather.provider.WeatherProviderRegistry;
|
||||||
|
|
||||||
|
public class WeatherProviderCLISelector {
|
||||||
|
private CLIInputReader cliInputReader;
|
||||||
|
private WeatherProviderRegistry weatherProviderRegistry;
|
||||||
|
|
||||||
|
public WeatherProviderCLISelector(CLIInputReader cliInputReader, WeatherProviderRegistry weatherProviderRegistry) {
|
||||||
|
this.cliInputReader = cliInputReader;
|
||||||
|
this.weatherProviderRegistry = weatherProviderRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WeatherProvider selectWeatherProviderFromCLI() {
|
||||||
|
System.out.println("Для продолжения выбери сервис, предоставляющие погоду из представленных ниже.");
|
||||||
|
System.out.println("Доступные сервисы погоды:");
|
||||||
|
|
||||||
|
var weatherProviders = weatherProviderRegistry.getAllWeatherProviders();
|
||||||
|
for (var weatherProviderIndex = 0; weatherProviderIndex < weatherProviders.size(); weatherProviderIndex ++) {
|
||||||
|
var weatherProvider = weatherProviders.get(weatherProviderIndex);
|
||||||
|
System.out.println((weatherProviderIndex + 1) + ". '" + weatherProvider.getName() + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
var weatherProviderIndexSelectedByUser = requestWeatherProviderIndexFromCLI();
|
||||||
|
while (weatherProviderIndexSelectedByUser < 1 || weatherProviderIndexSelectedByUser > weatherProviders.size()) {
|
||||||
|
System.out.println("Число должно быть от 1 до " + weatherProviders.size() + ". Попробуй еще раз.");
|
||||||
|
weatherProviderIndexSelectedByUser = requestWeatherProviderIndexFromCLI();
|
||||||
|
}
|
||||||
|
|
||||||
|
return weatherProviders.get(weatherProviderIndexSelectedByUser - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int requestWeatherProviderIndexFromCLI() {
|
||||||
|
System.out.print(">> Введите номер сервиса: ");
|
||||||
|
return cliInputReader.readInteger();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package ru.dima.weather.provider;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WeatherProviderRegistry {
|
||||||
|
|
||||||
|
private List<WeatherProvider> registeredWeatherProviders = new ArrayList<>();
|
||||||
|
|
||||||
|
public void registerWeatherProvider(WeatherProvider weatherProvider) {
|
||||||
|
registeredWeatherProviders.add(weatherProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WeatherProvider> getAllWeatherProviders() {
|
||||||
|
return Collections.unmodifiableList(registeredWeatherProviders);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user