diff options
Diffstat (limited to 'src/main/scala/reading/models')
-rw-r--r-- | src/main/scala/reading/models/Filter.scala | 5 | ||||
-rw-r--r-- | src/main/scala/reading/models/FilterFactory.scala | 10 | ||||
-rw-r--r-- | src/main/scala/reading/models/FilterKind.scala | 1 | ||||
-rw-r--r-- | src/main/scala/reading/models/Genre.scala | 6 | ||||
-rw-r--r-- | src/main/scala/reading/models/GroupedTheme.scala | 43 | ||||
-rw-r--r-- | src/main/scala/reading/models/Period.scala | 4 | ||||
-rw-r--r-- | src/main/scala/reading/models/Theme.scala | 59 |
7 files changed, 104 insertions, 24 deletions
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 + } + } } |