PRAPRO.rst

Pracownia Programowania

Projekt

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

Zapytania HTTP in Java

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);
}

Ocena

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%