aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/reading/models
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/reading/models')
-rw-r--r--src/main/scala/reading/models/Filter.scala5
-rw-r--r--src/main/scala/reading/models/FilterFactory.scala10
-rw-r--r--src/main/scala/reading/models/FilterKind.scala1
-rw-r--r--src/main/scala/reading/models/Genre.scala6
-rw-r--r--src/main/scala/reading/models/GroupedTheme.scala43
-rw-r--r--src/main/scala/reading/models/Period.scala4
-rw-r--r--src/main/scala/reading/models/Theme.scala59
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
+ }
+ }
}