From f9bc96bbb095e252b7a8eeefec6f053456989858 Mon Sep 17 00:00:00 2001 From: Joris Date: Tue, 7 Feb 2017 20:24:02 +0100 Subject: Group themes --- src/main/scala/reading/Books.scala | 232 +++++++++++----------- src/main/scala/reading/component/index/Menu.scala | 13 +- src/main/scala/reading/models/Filter.scala | 5 +- src/main/scala/reading/models/FilterFactory.scala | 10 + src/main/scala/reading/models/FilterKind.scala | 1 + src/main/scala/reading/models/Genre.scala | 6 + src/main/scala/reading/models/GroupedTheme.scala | 43 ++++ src/main/scala/reading/models/Period.scala | 4 +- src/main/scala/reading/models/Theme.scala | 59 ++++-- 9 files changed, 231 insertions(+), 142 deletions(-) create mode 100644 src/main/scala/reading/models/GroupedTheme.scala diff --git a/src/main/scala/reading/Books.scala b/src/main/scala/reading/Books.scala index 1eeecc6..9dd8bed 100644 --- a/src/main/scala/reading/Books.scala +++ b/src/main/scala/reading/Books.scala @@ -39,7 +39,7 @@ object Books { parts = 5, period = Some(Contemporain), genres = Seq(Policier), - themes = Seq(VieNocturne), + themes = Seq(Americain), programs = Seq(), level = Difficile ), @@ -50,8 +50,8 @@ object Books { year = "2011-2016", parts = 9, period = Some(Contemporain), - genres = Seq(), - themes = Seq(Amitie, Fratrie), + genres = Seq(Roman), + themes = Seq(Amitie, Famille), programs = Seq(), level = Moyen ), @@ -61,7 +61,7 @@ object Books { author = "Stephen CHBOSKY", year = "2012", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Conflit), programs = Seq(), level = Moyen @@ -72,7 +72,7 @@ object Books { author = "Jenny DOWNHAM", year = "2011", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour, Adolescence, Maladie), programs = Seq(), level = Difficile @@ -83,7 +83,7 @@ object Books { author = "John GREEN", year = "2013", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour, Adolescence, Maladie), programs = Seq(), level = Moyen @@ -107,7 +107,7 @@ object Books { year = "2000-2003", parts = 4, period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Amour, Famille, Adolescence), programs = Seq(Autrui), level = Moyen @@ -118,7 +118,7 @@ object Books { author = "Jacqueline WILSON", year = "2009", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Famille, Amour), programs = Seq(Autrui), level = Moyen @@ -152,8 +152,8 @@ object Books { author = "J-C MOURLEVAT et Vincent DUTRAIT", year = "2010", period = None, - genres = Seq(), - themes = Seq(Aventure, Fratrie), + genres = Seq(Roman), + themes = Seq(Aventure, Famille), programs = Seq(RecitAventure), level = Facile ), @@ -267,7 +267,7 @@ object Books { year = "2004", period = Some(Siecle20), genres = Seq(RomanHistorique), - themes = Seq(Guerre, Fratrie), + themes = Seq(Guerre, Famille), programs = Seq(), level = Moyen ), @@ -492,7 +492,7 @@ object Books { author = "C.S LEWIS", year = "2002-2008", period = None, - genres = Seq(), + genres = Seq(Fantasy), themes = Seq(Aventure, Famille), programs = Seq(), level = Moyen @@ -663,9 +663,9 @@ object Books { author = "Mary SHELLEY", year = "1818", period = None, - genres = Seq(Fantastique), - themes = Seq(Peur), - programs = Seq(), + genres = Seq(SF), + themes = Seq(Monstrueux), + programs = Seq(Monstre), level = Moyen ), @@ -674,7 +674,7 @@ object Books { author = "FRIGIEL et Nicolas DIGARD", year = "2016", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Magie, Famille, Aventure), programs = Seq(), level = Moyen @@ -685,7 +685,7 @@ object Books { author = "Robert MUCHAMORE", year = "2009-2016", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Espionnage, Americain), programs = Seq(), level = Moyen @@ -696,7 +696,7 @@ object Books { author = "Estelle MASKAME", year = "2016", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour, Famille, Adolescence), programs = Seq(), level = Moyen @@ -808,7 +808,7 @@ object Books { author = "GOSCINNY et SEMPE", year = "1973", period = Some(Siecle20), - genres = Seq(), + genres = Seq(Comique), themes = Seq(Amitie, Ecole, Famille), programs = Seq(), level = Facile @@ -820,7 +820,7 @@ object Books { year = "2008-2016", period = Some(Contemporain), genres = Seq(BD), - themes = Seq(Fratrie, College), + themes = Seq(Famille, College), programs = Seq(), level = Facile ), @@ -854,7 +854,7 @@ object Books { year = "2010", parts = 2, period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Famille, Nature, Aventure, Amour), programs = Seq(), level = Difficile @@ -865,7 +865,7 @@ object Books { author = "E.R LINK", year = "2016", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Aventure, Pirate, Amour, Amitie), programs = Seq(), level = Difficile @@ -901,7 +901,7 @@ object Books { year = "2012-2014", parts = 5, period = None, - genres = Seq(), + genres = Seq(RomanAventure, Fantasy), themes = Seq(Famille, Nature, Aventure, Poetique), programs = Seq(RecitAventure), level = Facile @@ -937,7 +937,7 @@ object Books { year = "2013-2016", parts = 9, period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Amour, Adolescence), programs = Seq(), level = Moyen @@ -948,9 +948,9 @@ object Books { author = "Jonathan STROUD", year = "2003-2006", parts = 3, - period = None, + period = Some(Siecle19), genres = Seq(Fantasy), - themes = Seq(Histoire, Magie), + themes = Seq(Humour, Magie), programs = Seq(), level = Difficile ), @@ -960,7 +960,7 @@ object Books { author = "Fleur FERRIS", year = "2016", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Internet, Enquete), programs = Seq(), level = Moyen @@ -995,7 +995,7 @@ object Books { author = "Daniel PENNAC", year = "1989", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Animal), programs = Seq(), level = Facile @@ -1006,7 +1006,7 @@ object Books { author = "Mathias MALZIEU", year = "2009", period = Some(Siecle19), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour), programs = Seq(DireAmour), level = Facile @@ -1017,7 +1017,7 @@ object Books { author = "Maintenant qu’il fait tout le temps nuit sur toi", year = "2006", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Deuil, Famille), programs = Seq(), level = Facile @@ -1028,7 +1028,7 @@ object Books { author = "Mathias MALZIEU", year = "2014", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour, Enquete), programs = Seq(), level = Facile @@ -1040,7 +1040,7 @@ object Books { year = "2016", period = None, genres = Seq(JournalIntime), - themes = Seq(Maladie, Mort), + themes = Seq(Maladie), programs = Seq(), level = Moyen ), @@ -1095,7 +1095,7 @@ object Books { year = "2014", parts = 2, period = Some(Antiquite), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Enquete, Enfants), programs = Seq(), level = Moyen @@ -1118,7 +1118,7 @@ object Books { author = "Colas GUTMAN", year = "2007", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Conflit, Enfants, Famille), programs = Seq(Resister), level = Facile @@ -1129,7 +1129,7 @@ object Books { author = "SEMPE et GOSCINNY", year = "2008", period = None, - genres = Seq(), + genres = Seq(Comique), themes = Seq(Enfants, Amitie, Humour), programs = Seq(Resister), level = Facile @@ -1152,7 +1152,7 @@ object Books { author = "Hervé WALBECQ", year = "2015", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Poetique), programs = Seq(CreationPoetique), level = Facile @@ -1163,7 +1163,7 @@ object Books { author = "Marie-Josée CHRISTIEN", year = "2015", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Nature, Poetique), programs = Seq(CreationPoetique), level = Facile @@ -1174,7 +1174,7 @@ object Books { author = "Jean-Claude MOURLEVAT", year = "2003", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Aventure, Folie), programs = Seq(RecitAventure), level = Facile @@ -1185,7 +1185,7 @@ object Books { author = "Claire JULLIARD", year = "1997", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Aventure, Amitie, Famille, Conflit), programs = Seq(RecitAventure), level = Moyen @@ -1195,8 +1195,8 @@ object Books { title = "Le Renard de Morlange", author = "Alain SURGET", year = "1995", - period = Some(MA), - genres = Seq(), + period = Some(MoyenAge), + genres = Seq(Roman), themes = Seq(Animal, Metamorphose), programs = Seq(Monstre), level = Facile @@ -1207,7 +1207,7 @@ object Books { author = "Yves GREVET", year = "2006", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Famille, Exclusion, Poetique), programs = Seq(Monstre), level = Facile @@ -1218,7 +1218,7 @@ object Books { author = "Xavier-Laurent PETIT", year = "2015", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Nature, Animal, Amitie, Amour, Famille), programs = Seq(HommeEtNature), level = Moyen @@ -1240,7 +1240,7 @@ object Books { author = "Thimothée DE FOMBELLE, Julie RICOSSE", year = "2009", period = Some(Futur), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Ecole, Nature, Amour), programs = Seq(UniversNouveaux), level = Facile @@ -1250,7 +1250,7 @@ object Books { title = "Bjorn le Morphir", author = "Thomas LAVACHERY", year = "2004", - period = Some(MA), + period = Some(MoyenAge), genres = Seq(BD, Fantasy, RomanAventure), themes = Seq(Combat, Initiation), programs = Seq(Heros), @@ -1261,7 +1261,7 @@ object Books { title = "Cinq histoires d’amour et de chevalerie", author = "Isabelle PERIER et NADEL", year = "2012", - period = Some(MA), + period = Some(MoyenAge), genres = Seq(), themes = Seq(Amour, Chevalerie), programs = Seq(Heros), @@ -1274,7 +1274,7 @@ object Books { year = "2016", period = Some(Contemporain), genres = Seq(Epistolaire), - themes = Seq(Discrimination, Laideur, Adolescence, Famille, Ecole), + themes = Seq(Harcelement, Laideur, Adolescence, Famille, Ecole), programs = Seq(Autrui), level = Facile ), @@ -1284,7 +1284,7 @@ object Books { author = "Anne PERCIN", year = "2015", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Internet, Famille, Maladie), programs = Seq(Autrui), level = Facile @@ -1295,7 +1295,7 @@ object Books { author = "Marie-Aude MURAIL", year = "2004", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Handicap, Humour, Famille), programs = Seq(Autrui), level = Moyen @@ -1306,7 +1306,7 @@ object Books { author = "Brigitte MINNE", year = "2007", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Deuil, Handicap), programs = Seq(Autrui), level = Facile @@ -1317,8 +1317,8 @@ object Books { author = "Christophe LEON", year = "2011", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Adolescence, Famille, Crime, Justice), + genres = Seq(Roman), + themes = Seq(Amitie, Famille, Crime), programs = Seq(Autrui), level = Facile ), @@ -1340,8 +1340,8 @@ object Books { author = "Hervé GIRAUD", year = "2016", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Deuil, Maladie, Animal, Famille, Mort), + genres = Seq(Roman), + themes = Seq(Deuil, Maladie, Animal, Famille), programs = Seq(Autrui), level = Facile ), @@ -1351,8 +1351,8 @@ object Books { author = "Antoine DOLE", year = "2013", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Difference, Exclusion, Famille, Violence, Ecole), + genres = Seq(Roman), + themes = Seq(Homosexualite, Exclusion, Famille, Ecole), programs = Seq(Autrui), level = Facile ), @@ -1362,8 +1362,8 @@ object Books { author = "Orianne CHARPENTIER", year = "2014", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Adolescence, Deuil, Famille, Mort), + genres = Seq(Roman), + themes = Seq(Adolescence, Deuil, Famille), programs = Seq(Autrui), level = Facile ), @@ -1384,8 +1384,8 @@ object Books { author = "Xavier-Laurent PETIT", year = "2005", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Pauvrete, Famille, Violence, Dictature, Enfants, Musique), + genres = Seq(Roman), + themes = Seq(Pauvrete, Famille, Dictature, Enfants, Musique), programs = Seq(Reel), level = Moyen ), @@ -1407,7 +1407,7 @@ object Books { year = "2014", period = Some(Siecle19), genres = Seq(Fantastique), - themes = Seq(Angoisse, Famille, Mensonge), + themes = Seq(Secret, Folie, Famille, Mensonge), programs = Seq(Reel), level = Moyen ), @@ -1428,8 +1428,8 @@ object Books { author = "Korneï TCHOUKOVSKI", year = "2015", period = Some(Siecle19), - genres = Seq(), - themes = Seq(Exclusion, Discrimination, Ecole), + genres = Seq(Roman), + themes = Seq(Exclusion, Ecole), programs = Seq(Valeurs), level = Moyen ), @@ -1450,7 +1450,7 @@ object Books { author = "Marie-Aude MURAIL", year = "2004", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Ecole, Famille, Conflit), programs = Seq(Valeurs), level = Moyen @@ -1461,7 +1461,7 @@ object Books { author = "Marie-Aude MURAIL", year = "2016", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Deuil, Famille, Metissage), programs = Seq(Valeurs), level = Moyen @@ -1473,7 +1473,7 @@ object Books { year = "2014", period = Some(Siecle19), genres = Seq(BD), - themes = Seq(Animal, Discrimination, Violence, Racisme), + themes = Seq(Animal, Racisme), programs = Seq(Valeurs), level = Facile ), @@ -1483,7 +1483,7 @@ object Books { author = "Annelise HEURTIER", year = "2015", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Deuil, Migration, Famille, Adolescence), programs = Seq(Valeurs), level = Moyen @@ -1494,8 +1494,8 @@ object Books { author = "Mélody GORNET", year = "2015", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Adolescence, Famille, Mort, Deuil, Violence, Ecole), + genres = Seq(Roman), + themes = Seq(Adolescence, Famille, Deuil, Ecole), programs = Seq(Valeurs), level = Facile ), @@ -1505,7 +1505,7 @@ object Books { author = "Valentine GOBY", year = "2013", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amour, Famille, Migration, Amitie, Litterature), programs = Seq(Valeurs), level = Facile @@ -1538,7 +1538,7 @@ object Books { author = "Frank ANDRIAT", year = "2003", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Suicide, Homosexualite, Ecole, Discrimination), programs = Seq(Valeurs), level = Facile @@ -1572,7 +1572,7 @@ object Books { year = "2013", period = Some(Contemporain), genres = Seq(Fantastique), - themes = Seq(Adolescence, Violence, Danse), + themes = Seq(Adolescence, Viol, Danse), programs = Seq(SeRaconter), level = Facile ), @@ -1584,7 +1584,7 @@ object Books { parts = 8, period = Some(Contemporain), genres = Seq(Manga, SF), - themes = Seq(Adolescence, Mort, Violence, Conflit), + themes = Seq(Adolescence, Immortalite, Conflit, Mutant), programs = Seq(Reel), level = Moyen ), @@ -1644,7 +1644,7 @@ object Books { parts = 6, period = None, genres = Seq(Manga, Fantastique, SF), - themes = Seq(Sentiment, Difference, Mort, Poetique), + themes = Seq(Mutant, Magie, Sentiment, Poetique), programs = Seq(), level = Facile ), @@ -1667,8 +1667,8 @@ object Books { year = "2016", parts = 42, period = None, - genres = Seq(Fantastique), - themes = Seq(Mort), + genres = Seq(Nouvelle, Fantastique, Thriller), + themes = Seq(Vieillesse), programs = Seq(SeRaconter), level = Difficile ), @@ -1752,7 +1752,7 @@ object Books { parts = 3, period = None, genres = Seq(Manga), - themes = Seq(Mort, Magie, Conflit), + themes = Seq(Suicide, Magie, Conflit), programs = Seq(), level = Moyen ), @@ -1764,7 +1764,7 @@ object Books { parts = 2, period = None, genres = Seq(Fantastique), - themes = Seq(Fantome, Humour, Peur, Famille, Malediction), + themes = Seq(Fantome, Humour, Famille, Malediction), programs = Seq(), level = Moyen ), @@ -1776,7 +1776,7 @@ object Books { parts = 2, period = None, genres = Seq(SF), - themes = Seq(Conflit, Ecole, Americain, Violence, Amitie), + themes = Seq(Conflit, Ecole, Americain, Amitie), programs = Seq(), level = Moyen ), @@ -1786,8 +1786,8 @@ object Books { author = "Lucie PIERRAT-PAJOT, Donatien MARY", year = "2016", period = Some(Siecle19), - genres = Seq(Uchronie), - themes = Seq(Histoire, Litterature, Complot), + genres = Seq(Uchronie, SF, Dystopie), + themes = Seq(Revolution, Litterature, Complot), programs = Seq(Ville), level = Moyen ), @@ -1809,8 +1809,8 @@ object Books { author = "Nastasia RUGANI", year = "2014", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Famille, Adolescence, Violence, Manipulation), + genres = Seq(Roman), + themes = Seq(Famille, Adolescence, Maltraitance, Manipulation), programs = Seq(), level = Moyen ), @@ -1820,7 +1820,7 @@ object Books { author = "Jean-Philippe BLONDEL", year = "2011", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Amitie, Deuil, Ecole, Musique, Adolescence), programs = Seq(Autrui), level = Facile @@ -1842,7 +1842,7 @@ object Books { author = "Anne-Laure BONDOUX", year = "2009", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Enfants, Migration), programs = Seq(), level = Moyen @@ -1854,7 +1854,7 @@ object Books { year = "2006", period = None, genres = Seq(SF, Dystopie), - themes = Seq(Combat, Dictature, Adolescence, Amitie, Peur), + themes = Seq(Combat, Dictature, Adolescence, Amitie), programs = Seq(), level = Moyen ), @@ -1864,7 +1864,7 @@ object Books { author = "Anne-Laure BONDOUX", year = "2003", period = None, - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Crime, Amitie, Apprentissage), programs = Seq(), level = Moyen @@ -1875,7 +1875,7 @@ object Books { author = "Marie-Aude MURAIL", year = "2000", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Deuil, Maladie, Homosexualite, Famille, Humour), programs = Seq(Autrui), level = Moyen @@ -1887,8 +1887,8 @@ object Books { year = "2011-2012", parts = 4, period = Some(Contemporain), - genres = Seq(Policier), - themes = Seq(Enquete, Amitie, Internet, Peur), + genres = Seq(Policier, Thriller), + themes = Seq(Enquete, Amitie, Internet, Secret), programs = Seq(), level = Facile ), @@ -1910,8 +1910,8 @@ object Books { author = "Sherman ALEXIE", year = "2013", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Humour, Difference, Discrimination, Ecole, Adolescence, Famille), + genres = Seq(Roman), + themes = Seq(Humour, Discrimination, Ecole, Adolescence, Famille), programs = Seq(Valeurs, TraversSociete), level = Moyen ), @@ -1921,7 +1921,7 @@ object Books { author = "Kathrin Schrocke", year = "2013", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Handicap, Amour, Adolescence), programs = Seq(Autrui), level = Moyen @@ -1943,8 +1943,8 @@ object Books { author = "Sarah COHEN-SCALI", year = "2013", period = Some(Contemporain), - genres = Seq(), - themes = Seq(Dictature, Guerre, Eugenisme, Nazisme), + genres = Seq(Roman), + themes = Seq(Dictature, Guerre, Genetique, Nazisme), programs = Seq(Agir), level = Difficile ), @@ -1954,7 +1954,7 @@ object Books { author = "Malorie BLACKMAN", year = "2011", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Famille, Homosexualite, Apprentissage), programs = Seq(), level = Moyen @@ -1965,7 +1965,7 @@ object Books { author = "Mikaël OLLIVIER", year = "2011", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Famille, Adolescence, Amour, Apprentissage, Secret), programs = Seq(), level = Moyen @@ -1976,7 +1976,7 @@ object Books { author = "Annelise HEURTIER", year = "2015", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Voyage, Famille, Adolescence, Initiation, Maladie, Pauvrete), programs = Seq(VoyageEtAventure), level = Moyen @@ -2022,8 +2022,8 @@ object Books { year = "2015-2016", parts = 3, period = None, - genres = Seq(), - themes = Seq(Adolescence, Amour, Famille, Mort, Amitie, Violence), + genres = Seq(Roman), + themes = Seq(Adolescence, Amour, Famille, Amitie, Maltraitance), programs = Seq(), level = Difficile ), @@ -2033,7 +2033,7 @@ object Books { year = "2006", period = Some(Contemporain), genres = Seq(Epistolaire), - themes = Seq(Adolescence, Suicide, Mort, Deuil), + themes = Seq(Adolescence, Deuil), programs = Seq(SeRaconter), level = Facile ), @@ -2045,7 +2045,7 @@ object Books { parts = 2, period = Some(Siecle20), genres = Seq(BD), - themes = Seq(Nazisme, Guerre, Violence, Mort), + themes = Seq(Nazisme, Guerre, Antisemitisme, Prison, Maltraitance), programs = Seq(SeRaconter), level = Facile ), @@ -2055,7 +2055,7 @@ object Books { author = "Jo WITEK", year = "2015", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Sexualite, Apprentissage, Sentiment), programs = Seq(SeRaconter), level = Facile @@ -2066,7 +2066,7 @@ object Books { author = "Elisabeth ATKINSON", year = "2010", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Amitie, Famille, Discrimination), programs = Seq(SeRaconter), level = Moyen @@ -2088,7 +2088,7 @@ object Books { author = "Nadia COSTE", year = "2016", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Dictature, Manipulation, SegregationRaciale, Amour), programs = Seq(TraversSociete), level = Moyen @@ -2110,7 +2110,7 @@ object Books { author = "Dorothy M. JOHNSON", year = "2015", period = Some(Siecle19), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Americain), programs = Seq(Agir), level = Moyen @@ -2121,7 +2121,7 @@ object Books { author = "Romain SLOCOMBE", year = "2008", period = Some(Siecle20), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Guerre, Nazisme), programs = Seq(Agir), level = Moyen @@ -2132,7 +2132,7 @@ object Books { author = "Gary D. SCHMIDT", year = "2016", period = Some(Contemporain), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Adolescence, Ecole, Litterature), programs = Seq(Agir), level = Moyen @@ -2143,7 +2143,7 @@ object Books { author = "Philippe NESSMANN", year = "2016", period = Some(Siecle20), - genres = Seq(), + genres = Seq(Roman), themes = Seq(Guerre, Femme, Art), programs = Seq(Agir), level = Facile @@ -2154,8 +2154,8 @@ object Books { author = "JC MOSCOVICI", year = "1995", period = Some(Siecle20), - genres = Seq(), - themes = Seq(Guerre, Nazisme, Discrimination, Famille), + genres = Seq(Autobiographie), + themes = Seq(Guerre, Nazisme, Antisemitisme, Racisme, Famille), programs = Seq(Agir), level = Facile ), @@ -2165,8 +2165,8 @@ object Books { author = "Jean-Jacques GREIF", year = "1998", period = Some(Siecle20), - genres = Seq(), - themes = Seq(Guerre, Mort, Discrimination, Sport), + genres = Seq(Roman), + themes = Seq(Guerre, Maltraitance, Discrimination, Sport, Antisemitisme, Prison, Nazisme), programs = Seq(Agir), level = Moyen ), @@ -2176,8 +2176,8 @@ object Books { author = "John BOYNE", year = "2006", period = Some(Siecle20), - genres = Seq(), - themes = Seq(Guerre, Amitie, Discrimination, Nazisme), + genres = Seq(Roman), + themes = Seq(Guerre, Amitie, Antisemitisme, Nazisme), programs = Seq(Agir), level = Moyen ), @@ -2188,7 +2188,7 @@ object Books { year = "2015", period = Some(Siecle20), genres = Seq(BD), - themes = Seq(Violence, Racisme, Discrimination), + themes = Seq(Racisme, Discrimination), programs = Seq(Agir), level = Facile ) diff --git a/src/main/scala/reading/component/index/Menu.scala b/src/main/scala/reading/component/index/Menu.scala index 9645f5a..a0aabd1 100644 --- a/src/main/scala/reading/component/index/Menu.scala +++ b/src/main/scala/reading/component/index/Menu.scala @@ -25,10 +25,19 @@ object Menu { div( MenuStyle.groups, filters().find(_.kind == FilterKind.Grade) match { + case Some(grade) => { + val programs = Program.values.filter(p => Program.grade(p).toString() == grade.nonFormattedName) + group(books, filters, grade.name, programs.map(Filter.apply(_)), Some(grade)) + } case None => group(books, filters, "Classe", Grade.values.map(Filter.apply(_))) - case Some(grade) => group(books, filters, grade.name, Program.values.map(Filter.apply(_)), Some(grade)) }, - group(books, filters, "Theme", Theme.values.sorted.map(Filter.apply(_))), + filters().find(_.kind == FilterKind.GroupedTheme) match { + case Some(groupedTheme) => { + val themes = Theme.values.filter(t => Theme.groupedTheme(t).toString() == groupedTheme.nonFormattedName) + group(books, filters, groupedTheme.name, themes.map(Filter.apply(_)), Some(groupedTheme)) + } + case None => group(books, filters, "Theme", GroupedTheme.values.map(Filter.apply(_))) + }, group(books, filters, "Genre", Genre.values.sorted.map(Filter.apply(_))), group(books, filters, "Niveau", Level.values.map(Filter.apply(_))), group(books, filters, "Période", Period.values.map(Filter.apply(_))) diff --git a/src/main/scala/reading/models/Filter.scala b/src/main/scala/reading/models/Filter.scala index c3d81c6..d14ca63 100644 --- a/src/main/scala/reading/models/Filter.scala +++ b/src/main/scala/reading/models/Filter.scala @@ -14,6 +14,7 @@ object Filter { def apply(kind: FilterKind, nonFormattedName: String): Option[Filter] = kind match { case FilterKind.Period => Period.withNameOption(nonFormattedName).map(apply[Period]) + case FilterKind.GroupedTheme => GroupedTheme.withNameOption(nonFormattedName).map(apply[GroupedTheme]) case FilterKind.Theme => Theme.withNameOption(nonFormattedName).map(apply[Theme]) case FilterKind.Genre => Genre.withNameOption(nonFormattedName).map(apply[Genre]) case FilterKind.Level => Level.withNameOption(nonFormattedName).map(apply[Level]) @@ -29,6 +30,8 @@ object Filter { def remove(fs: Seq[Filter], rf: Filter): Seq[Filter] = fs.filterNot { f => - equals(f, rf) || rf.kind == FilterKind.Grade && f.kind == FilterKind.Program + (equals(f, rf) + || rf.kind == FilterKind.Grade && f.kind == FilterKind.Program + || rf.kind == FilterKind.GroupedTheme && f.kind == FilterKind.Theme) } } diff --git a/src/main/scala/reading/models/FilterFactory.scala b/src/main/scala/reading/models/FilterFactory.scala index 269af82..c7b9fbf 100644 --- a/src/main/scala/reading/models/FilterFactory.scala +++ b/src/main/scala/reading/models/FilterFactory.scala @@ -15,6 +15,16 @@ object FilterFactory { } } + implicit object GroupedTheme extends FilterFactory[GroupedTheme] { + def create(groupedTheme: GroupedTheme): Filter = + new Filter { + def filter(book: Book): Boolean = book.themes.map(Theme.groupedTheme).contains(groupedTheme) + val kind: FilterKind = FilterKind.GroupedTheme + val nonFormattedName: String = groupedTheme.toString() + val name: String = groupedTheme.prettyPrint() + } + } + implicit object ThemeFilter extends FilterFactory[Theme] { def create(theme: Theme): Filter = new Filter { diff --git a/src/main/scala/reading/models/FilterKind.scala b/src/main/scala/reading/models/FilterKind.scala index ba63f15..1d01193 100644 --- a/src/main/scala/reading/models/FilterKind.scala +++ b/src/main/scala/reading/models/FilterKind.scala @@ -8,6 +8,7 @@ object FilterKind extends Enum[FilterKind] { val values = findValues case object Period extends FilterKind + case object GroupedTheme extends FilterKind case object Theme extends FilterKind case object Genre extends FilterKind case object Level extends FilterKind diff --git a/src/main/scala/reading/models/Genre.scala b/src/main/scala/reading/models/Genre.scala index 8c2a90f..2d55e60 100644 --- a/src/main/scala/reading/models/Genre.scala +++ b/src/main/scala/reading/models/Genre.scala @@ -9,7 +9,9 @@ sealed trait Genre extends EnumEntry with Ordered[Genre] { Compare.format(this.prettyPrint).compare(Compare.format(that.prettyPrint)) def prettyPrint(): String = this match { + case Autobiographie => "autobiographie" case JournalIntime => "journal intime" + case Roman => "roman" case RomanHistorique => "roman historique" case Policier => "policier" case Fantastique => "fantastique" @@ -24,13 +26,16 @@ sealed trait Genre extends EnumEntry with Ordered[Genre] { case Manga => "manga" case Thriller => "thriller" case Epistolaire => "Epistolaire" + case Nouvelle => "Nouvelle" } } object Genre extends Enum[Genre] { val values = findValues + case object Autobiographie extends Genre case object JournalIntime extends Genre + case object Roman extends Genre case object RomanHistorique extends Genre case object Policier extends Genre case object Fantastique extends Genre @@ -45,4 +50,5 @@ object Genre extends Enum[Genre] { case object Uchronie extends Genre case object Manga extends Genre case object Epistolaire extends Genre + case object Nouvelle extends Genre } diff --git a/src/main/scala/reading/models/GroupedTheme.scala b/src/main/scala/reading/models/GroupedTheme.scala new file mode 100644 index 0000000..9ece7db --- /dev/null +++ b/src/main/scala/reading/models/GroupedTheme.scala @@ -0,0 +1,43 @@ +package reading.models + +import enumeratum._ + +sealed trait GroupedTheme extends EnumEntry with Ordered[GroupedTheme] { + import GroupedTheme._ + + def compare(that: GroupedTheme): Int = { + values.indexOf(that) - values.indexOf(this) + } + + def prettyPrint(): String = this match { + case Culture => "culture" + case Decouverte => "découverte" + case Histoire => "histoire" + case Humour => "humour" + case Stratageme => "stratagème" + case Peur => "peur" + case Quotidien => "quotidien" + case Technologie => "technologie" + case Violence => "violence" + case Mort => "mort" + case Difference => "difference" + case Imaginaire => "imaginaire" + } +} + +object GroupedTheme extends Enum[GroupedTheme] { + val values = findValues + + case object Culture extends GroupedTheme + case object Decouverte extends GroupedTheme + case object Histoire extends GroupedTheme + case object Humour extends GroupedTheme + case object Stratageme extends GroupedTheme + case object Peur extends GroupedTheme + case object Quotidien extends GroupedTheme + case object Technologie extends GroupedTheme + case object Violence extends GroupedTheme + case object Mort extends GroupedTheme + case object Difference extends GroupedTheme + case object Imaginaire extends GroupedTheme +} diff --git a/src/main/scala/reading/models/Period.scala b/src/main/scala/reading/models/Period.scala index 00e9427..f148b4c 100644 --- a/src/main/scala/reading/models/Period.scala +++ b/src/main/scala/reading/models/Period.scala @@ -10,7 +10,7 @@ sealed trait Period extends EnumEntry with Ordered[Period] { def prettyPrint(): String = this match { case Antiquite => "Antiquité" - case MA => "Moyen âge" + case MoyenAge => "Moyen âge" case Renaissance => "Renaissance" case Lumieres => "Lumières" case Louis14 => "Louis XIV" @@ -27,7 +27,7 @@ object Period extends Enum[Period] { val values = findValues case object Antiquite extends Period - case object MA extends Period + case object MoyenAge extends Period case object Renaissance extends Period case object Lumieres extends Period case object Louis14 extends Period diff --git a/src/main/scala/reading/models/Theme.scala b/src/main/scala/reading/models/Theme.scala index 632b678..6ab4b9f 100644 --- a/src/main/scala/reading/models/Theme.scala +++ b/src/main/scala/reading/models/Theme.scala @@ -10,7 +10,7 @@ sealed trait Theme extends EnumEntry with Ordered[Theme] { def prettyPrint(): String = this match { case Amitie => "amitié" - case Angoisse => "angoisse" + case Antisemitisme => "antisémitisme" case Adolescence => "adolescence" case Americain => "américain" case Amour => "amour" @@ -29,7 +29,6 @@ sealed trait Theme extends EnumEntry with Ordered[Theme] { case Danse => "danse" case Deuil => "deuil" case Dictature => "dictature" - case Difference => "différence" case Discrimination => "discrimination" case Dragon => "dragon" case Ecole => "école" @@ -37,47 +36,47 @@ sealed trait Theme extends EnumEntry with Ordered[Theme] { case Emancipation => "émancipation" case Enfants => "enfants" case Espionnage => "espionnage" - case Eugenisme => "eugénisme" case Exclusion => "exclusion" case Famille => "famille" case Fantome => "fantôme" case Femme => "femme" case Folie => "folie" - case Fratrie => "fratrie" case Genetique => "génétique" case Guerre => "guerre" case Handicap => "handicap" case Harcelement => "harcelement" - case Histoire => "histoire" case Homosexualite => "Homosexualité" case Humour => "humour" + case Immortalite => "immortalité" case Initiation => "initiation" case Internet => "internet" case JeuVideo => "jeu vidéo" - case Justice => "justice" case Laideur => "laideur" case Litterature => "littérature" case Magie => "magie" case Maladie => "maladie" case Malediction => "malédiction" + case Maltraitance => "maltraitance" case Manipulation => "manipulation" case Marginalite => "marginalite" case Mensonge => "mensonge" case Metamorphose => "metamorphose" case Metissage => "metissage" case Migration => "migration" - case Mort => "mort" + case Monstrueux => "monstrueux" case Musique => "musique" + case Mutant => "mutant" case Mythologie => "mythologie" case Nature => "nature" case Nazisme => "nazisme" case Parents => "parents" case Pauvrete => "pauvrete" - case Peur => "peur" case Pirate => "pirate" case Poetique => "poétique" + case Prison => "prison" case Racisme => "racisme" case Reecriture => "réécriture" + case Revolution => "révolution" case Robot => "robot" case Secret => "secret" case SegregationRaciale => "ségrégation raciale" @@ -86,8 +85,8 @@ sealed trait Theme extends EnumEntry with Ordered[Theme] { case Sport => "sport" case Suicide => "suicide" case Vampire => "vampire" - case VieNocturne => "vie nocturne" - case Violence => "violence" + case Vieillesse => "vieillesse" + case Viol => "viol" case Voyage => "voyage" } } @@ -99,7 +98,7 @@ object Theme extends Enum[Theme] { case object Americain extends Theme case object Amitie extends Theme case object Amour extends Theme - case object Angoisse extends Theme + case object Antisemitisme extends Theme case object Animal extends Theme case object Apprentissage extends Theme case object Art extends Theme @@ -109,15 +108,13 @@ object Theme extends Enum[Theme] { case object Crime extends Theme case object Danse extends Theme case object Deuil extends Theme - case object Difference extends Theme - case object Discrimination extends Theme case object Dictature extends Theme + case object Discrimination extends Theme case object Ecole extends Theme case object Emancipation extends Theme case object Enfants extends Theme case object Enquete extends Theme case object Espionnage extends Theme - case object Eugenisme extends Theme case object Exclusion extends Theme case object Fantome extends Theme case object Femme extends Theme @@ -129,22 +126,21 @@ object Theme extends Enum[Theme] { case object Cour extends Theme case object Dragon extends Theme case object Famille extends Theme - case object Fratrie extends Theme case object Genetique extends Theme case object Guerre extends Theme case object Handicap extends Theme case object Harcelement extends Theme - case object Histoire extends Theme case object Homosexualite extends Theme case object Humour extends Theme + case object Immortalite extends Theme case object Initiation extends Theme case object Internet extends Theme case object JeuVideo extends Theme - case object Justice extends Theme case object Laideur extends Theme case object Litterature extends Theme case object Maladie extends Theme case object Malediction extends Theme + case object Maltraitance extends Theme case object Manipulation extends Theme case object Magie extends Theme case object Marginalite extends Theme @@ -152,18 +148,20 @@ object Theme extends Enum[Theme] { case object Metamorphose extends Theme case object Metissage extends Theme case object Migration extends Theme - case object Mort extends Theme + case object Monstrueux extends Theme case object Musique extends Theme + case object Mutant extends Theme case object Mythologie extends Theme case object Nature extends Theme case object Nazisme extends Theme case object Parents extends Theme case object Pauvrete extends Theme - case object Peur extends Theme case object Pirate extends Theme case object Poetique extends Theme + case object Prison extends Theme case object Racisme extends Theme case object Reecriture extends Theme + case object Revolution extends Theme case object Robot extends Theme case object Secret extends Theme case object SegregationRaciale extends Theme @@ -172,7 +170,26 @@ object Theme extends Enum[Theme] { case object Sport extends Theme case object Suicide extends Theme case object Vampire extends Theme - case object VieNocturne extends Theme - case object Violence extends Theme + case object Vieillesse extends Theme + case object Viol extends Theme case object Voyage extends Theme + + def groupedTheme(theme: Theme): GroupedTheme = { + import GroupedTheme._ + + theme match { + case Art | Americain | Danse | Litterature | Musique | Mythologie | Poetique | Reecriture | Sport => Culture + case Nature | Aventure | Initiation | Pirate | Voyage | Animal => Decouverte + case Dragon | Magie => Imaginaire + case Mutant | Beaute | Handicap | Homosexualite | Laideur | Metamorphose | Marginalite | Migration | Metissage | Pauvrete | Discrimination => Difference + case Maltraitance | Viol | Combat | Conflit | Crime | Harcelement | Exclusion | Racisme | Antisemitisme | SegregationRaciale | Prison => Violence + case Chevalerie | Cour | Dictature | Guerre | Nazisme | Revolution => Histoire + case Theme.Humour => GroupedTheme.Humour + case Enquete | Manipulation | Mensonge | Secret | Espionnage | Complot => Stratageme + case Fantome | Folie | Malediction | Vampire | Monstrueux => Peur + case Suicide | Deuil | Maladie | Immortalite | Vieillesse => Mort + case Adolescence | Amour | Amitie | Apprentissage | College | Ecole | Emancipation | Sentiment | Sexualite | Enfants | Femme | Parents | Famille => Quotidien + case Genetique | Internet | JeuVideo | Robot => Technologie + } + } } -- cgit v1.2.3