diff options
Diffstat (limited to 'src/main/scala/reading/models')
-rw-r--r-- | src/main/scala/reading/models/Book.scala | 1 | ||||
-rw-r--r-- | src/main/scala/reading/models/Difficulty.scala | 6 | ||||
-rw-r--r-- | src/main/scala/reading/models/Filter.scala | 10 | ||||
-rw-r--r-- | src/main/scala/reading/models/Level.scala | 33 | ||||
-rw-r--r-- | src/main/scala/reading/models/Program.scala | 70 |
5 files changed, 117 insertions, 3 deletions
diff --git a/src/main/scala/reading/models/Book.scala b/src/main/scala/reading/models/Book.scala index 7c4bf8a..ef9eb9b 100644 --- a/src/main/scala/reading/models/Book.scala +++ b/src/main/scala/reading/models/Book.scala @@ -6,6 +6,7 @@ case class Book ( period: Period, genres: Seq[Genre], themes: Seq[Theme], + program: Program, pages: Int ) extends Ordered[Book] { def compare(that: Book) = { diff --git a/src/main/scala/reading/models/Difficulty.scala b/src/main/scala/reading/models/Difficulty.scala index aade5f5..e20d7b2 100644 --- a/src/main/scala/reading/models/Difficulty.scala +++ b/src/main/scala/reading/models/Difficulty.scala @@ -6,17 +6,17 @@ object Difficulty { new Filter { def filter(book: Book): Boolean = book.pages < 200 val kind: FilterKind = DifficultyKind - def name: String = "facile" + val name: String = "facile" }, new Filter { def filter(book: Book): Boolean = book.pages >= 200 && book.pages < 400 val kind: FilterKind = DifficultyKind - def name: String = "moyen" + val name: String = "moyen" }, new Filter { def filter(book: Book): Boolean = book.pages > 400 val kind: FilterKind = DifficultyKind - def name: String = "difficile" + val name: String = "difficile" } ) } diff --git a/src/main/scala/reading/models/Filter.scala b/src/main/scala/reading/models/Filter.scala index 5e96cf9..a74a6f1 100644 --- a/src/main/scala/reading/models/Filter.scala +++ b/src/main/scala/reading/models/Filter.scala @@ -11,6 +11,7 @@ case object PeriodKind extends FilterKind case object ThemeKind extends FilterKind case object GenreKind extends FilterKind case object DifficultyKind extends FilterKind +case object ProgramKind extends FilterKind object Filter { def apply[T](in: T)(implicit filterFactory: FilterFactory[T]): Filter = @@ -54,4 +55,13 @@ object FilterFactory { val name: String = genre.toString() } } + + implicit object ProgramFilter extends FilterFactory[Program] { + def create(program: Program): Filter = + new Filter { + def filter(book: Book): Boolean = book.program == program + val kind: FilterKind = ProgramKind + val name: String = program.toString() + } + } } diff --git a/src/main/scala/reading/models/Level.scala b/src/main/scala/reading/models/Level.scala new file mode 100644 index 0000000..1f7e153 --- /dev/null +++ b/src/main/scala/reading/models/Level.scala @@ -0,0 +1,33 @@ +package reading.models + +import enumeratum._ + +sealed trait Level extends EnumEntry with Ordered[Level] { + import Level._ + + def compare(that: Level) = { + def toInt(level: Level): Int = level match { + case Sixieme => 6 + case Cinquieme => 5 + case Quatrieme => 4 + case Troisieme => 3 + } + toInt(that) - toInt(this) + } + + override def toString(): String = this match { + case Sixieme => "6ème" + case Cinquieme => "5ème" + case Quatrieme => "4ème" + case Troisieme => "3ème" + } +} + +object Level extends Enum[Level] { + val values = findValues + + case object Sixieme extends Level + case object Cinquieme extends Level + case object Quatrieme extends Level + case object Troisieme extends Level +} diff --git a/src/main/scala/reading/models/Program.scala b/src/main/scala/reading/models/Program.scala new file mode 100644 index 0000000..4603b03 --- /dev/null +++ b/src/main/scala/reading/models/Program.scala @@ -0,0 +1,70 @@ +package reading.models + +import enumeratum._ + +sealed trait Program extends EnumEntry { + import Program._ + + override def toString(): String = this match { + case Monstre => "Le monstre, aux limites de l'humain" + case RecitAventure => "Récits d'aventures" + case CreationPoetique => "Récit de création, création poétique" + case Resister => "Résister au plus fort : ruses, mensonges et masques" + + case VoyageEtAventure => "le voyage et l'aventure. Pourquoi aller vers l'inconnu ?" + case Autrui => "avec autrui : familles, amis, réseaux." + case UniversNouveaux => "imaginer des univers nouveaux." + case Heros => "héros, héroïnes et héroïsmes." + case HommeEtNature => "l'être humain est-il maître de la nature ?" + + case DireAmour => "Dire l'amour" + case IndividuEtSociete => "Individu et société : confrontations de valeur ?" + case FictionEtReel => "la fiction pour interroger le réel" + case Informer => "Informer, s'informer, déformer ?" + case Ville => "La ville, lieu de tous les possibles ?" + + case RaconterRepresenter => "Se raconter, se représenter" + case TraversSociete => "Dénoncer les travers de la société" + case VisionsPoetiques => "Visions poétiques du monde" + case AgirCite => "Agir dans la cité : individu et pouvoir" + case ProgresReveScientifique => "Progrès et rêves scientifiques" + } +} + +object Program extends Enum[Program] { + val values = findValues + + case object Monstre extends Program + case object RecitAventure extends Program + case object CreationPoetique extends Program + case object Resister extends Program + + case object VoyageEtAventure extends Program + case object Autrui extends Program + case object UniversNouveaux extends Program + case object Heros extends Program + case object HommeEtNature extends Program + + case object DireAmour extends Program + case object IndividuEtSociete extends Program + case object FictionEtReel extends Program + case object Informer extends Program + case object Ville extends Program + + case object RaconterRepresenter extends Program + case object TraversSociete extends Program + case object VisionsPoetiques extends Program + case object AgirCite extends Program + case object ProgresReveScientifique extends Program + + def level(program: Program): Level = { + import Level._ + + program match { + case Monstre | RecitAventure | CreationPoetique | Resister => Sixieme + case VoyageEtAventure | Autrui | UniversNouveaux | Heros | HommeEtNature => Cinquieme + case DireAmour | IndividuEtSociete | FictionEtReel | Informer | Ville => Quatrieme + case RaconterRepresenter | TraversSociete | VisionsPoetiques | AgirCite | ProgresReveScientifique => Troisieme + } + } +} |