Implementujte jednoduchou aplikaci pro evidenci knížek. Aplikace nače seznam knížek z JSON souboru a bude umět vypsat všechny knížky od zvoleného autora a také všechny knížky vydané v zadaném roce.
Nemusíte dodržet přesné pořadí kroků uvedených níže – např. se může hodit napsat si test před implementací nkódu, který bude testovat, nebo souběžně s ním.
- Aplikace bude obsahovat vedle třídy
Aplikace
už jen dvě další třídy,Kniha
aKnihaSluzba
. Obě nové třídy proto vytvořte přímo v packagecz.czechitas.ukol07
. - Třída
Kniha
bude JavaBean a bude reprezentovat jednu knížku. Podívejte se na strukturu JSON souborusrc/main/resources/cz/czechitas/ukol07/knihy.json
a strukturu třídy (properties) navhněte podle struktury JSON souboru. - Ve třídě
KnihaSluzba
bude field typuList<Kniha>
. Obsah tohoto souboru naplňte v konstruktoru třídy. Pro načtení použijteObjectMapper
.- Pro načtení použijte
InputStream
, který vytvoříte volánímKnihaSluzba.class.getResourceAsStream("knihy.json")
. Tímto způsobem načtetesoubor knihy.json, který je uložen vsrc/main/java
ve stejném package, jako třídaKnihaSluzba
. Nezapomeňte, žeInputStream
se musí po dokončení zavřít – použijte konstrukcitry-with-resources
. - Pro samotné načtení
List
u použijte následující konstrukci:KódobjectMapper.readValue(inputStream, new TypeReference<List<Kniha>>(){})
objectMapper.readValue(inputStream, List<Kniha>.class)
z historických důvodů nejde použít. Pokud potřebujete načíst kolekci nebo jakýkoli jiný generický typ, je potřeba použít konstrukci s třídouTypeReference
.
- Pro načtení použijte
- Ve třídě
KnihaSluzba
vytvořte vhodně pojmenovanou metodu, která vrátí seznam (List
) všech knih. - Ve třídě
KnihaSluzba
vytvořte vhodně pojmenovanou metodu, která vrátí seznam (List
) všech knih od zadaného autora (jméno autora bude parametr metody). Vrácený seznam může být prázdný. - Ve třídě
KnihaSluzba
vytvořte vhodně pojmenovanou metodu, která vrátí seznam (List
) všech knih vydaných v zadaném roce (rok bude parametr metody). Vrácený seznam může být prázdný. - Napište testy pro metody ve třídě
KnihaSluzba
. Nezapomeňte otestovat i okrajové případy – metoda pro výběr knih dle autora nebo orku nevrátí žádnou knížku nebo vrátí více knih. - Ve třídě Aplikace vytvořte spouštěcí metodu
main
. V této metodě vytvořte instanci třídyKnihaSluzba
. - Vypište do konzole (pomocí
System.out
) celkový počet knížek v naší malé databázi. - Vypište do konzole názvy všech knížek, které napsal Karel Čapek.
- Vypište všechny knížky vydané poprvé v roce 1845. Výpis bude ve tvaru jméno autora: název knihy.
- Jako bonus můžete validovat hodnoty předávané do setterů třídy
Kniha
. Pokud je parametr chybný, je vhodné vyhodit výjimkuIllegalArgumentException
:- Jméno autora by nemělo být prázdné (
null
ani prázdný String). - Název knihy by neměl být prázdný (
null
ani prázdný String). - Budeme uvažovat pouze tištěné knihy, takže rok vydání by neměl být starší, než je vynález knihtisku – použijte jako hraniční rok 1440.
- Jméno autora by nemělo být prázdné (
- Implementujte testy na validace implementované v setterech – tj. zda správné hodnoty projdou a chybné neprojdou (vyhodí výjimku).