Projekt z tematów 1-4
Zadanie:
Napisz program działający w terminalu (konsoli, inaczej proram tesktowy), który będzie podawał dane meteorologiczne ze strony https://openweathermap.org/
Program powinien wczytać przygotowaną przez Ciebie w formacie JSON listę miast i ich współrzędnych geograficznych (latitude i longintude) - minimum 5 miast. Następnie użytkownik powinien wpisywać nazwę miasta i otrzymywać aktualną pogodę w danym mieście - przez pogodę rozumiemy minimum dane na temat temperatury, ciśnienia i wilgotności.
Wyniki pomiarowe (przy wyjściu z programu) użytkownik ma mieć możliwość zapisania w trzech formatach do wyboru: pliku PDF, json lub xml. Wykorzystaj dowolną bibliotekę Javy do tworzenia plików PDF. Postać pliku jest dowolna (może być to jedna linijka tekstu na każde zapytanie z danymi: nazwa miasta : wyniki pomiarów), ma on zawierać podane wyżej informacje, może zawierać też dodatkowe elementy.
Napisz testy do wyrzystywanych metod, skorzystaj obowiązkowo z zamockowania danych dla danych pobieranych z endpointów serwisów.
W programie wykorzystaj strumienie oraz co najmniej jedną strukturę danych (set, map, list, stack, etc.).
Przykłąd wywołania:
P-Podaj miasto, Z-Zakończ
>>P
>>Poznan
Temp: 31 Wilgotnosc: 60 Cisnienie 1000
>>Z
P-PDF J-JSON X-XML
>>P
Możemy wykonywać żądania HTTP z kodu, najprościej użyć biblioteki Apache.httpclient.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
Wykonanie zapytania GET:
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet request = new HttpGet("https://api.gios.gov.pl/pjp-api/rest/station/findAll");
// add request headers
request.addHeader("custom-key", "programming");
try (CloseableHttpResponse response = httpclient.execute(request)) {
// Get HttpResponse Status
System.out.println(response.getStatusLine().toString());
HttpEntity entity = response.getEntity();
Header headers = entity.getContentType();
System.out.println(headers);
if (entity != null) {
// return it as a String
String result = EntityUtils.toString(entity);
System.out.println(result);
}
} catch (ClientProtocolException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
Testy - test zmockowanego zapytania, co najmiej 3 scenariusze testów, 2xPozytywny, Negatywny - np złe dane wejściowe : 30%
Strumienie - wykorzystanie strumienia do przetwarzania informacji: 10%
Serializacja i Deserializacja JSON + XML: 20%
Biblioteka PDF: 20%
Działanie zgodne ze specyfikacją i pobieranie prawidłowej pogody 20%