diff options
author | Joris | 2017-01-01 19:18:45 +0100 |
---|---|---|
committer | Joris | 2017-01-01 19:18:45 +0100 |
commit | 97206cf6e709dd750a75af5bb79251198be4546c (patch) | |
tree | 105b8df7838ece415afd9da81fbceb441b486d4e /src/main/scala/reading/models/Filter.scala | |
parent | 555b621b618e4810324a2658d33315b05157e6be (diff) | |
download | reading-97206cf6e709dd750a75af5bb79251198be4546c.tar.gz reading-97206cf6e709dd750a75af5bb79251198be4546c.tar.bz2 reading-97206cf6e709dd750a75af5bb79251198be4546c.zip |
Filter by level first and then filter by program
Diffstat (limited to 'src/main/scala/reading/models/Filter.scala')
-rw-r--r-- | src/main/scala/reading/models/Filter.scala | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/main/scala/reading/models/Filter.scala b/src/main/scala/reading/models/Filter.scala index a74a6f1..b8adcc1 100644 --- a/src/main/scala/reading/models/Filter.scala +++ b/src/main/scala/reading/models/Filter.scala @@ -12,6 +12,7 @@ case object ThemeKind extends FilterKind case object GenreKind extends FilterKind case object DifficultyKind extends FilterKind case object ProgramKind extends FilterKind +case object LevelKind extends FilterKind object Filter { def apply[T](in: T)(implicit filterFactory: FilterFactory[T]): Filter = @@ -22,6 +23,11 @@ object Filter { def equals(f1: Filter, f2: Filter): Boolean = f1.kind == f2.kind && f1.name == f2.name + + def remove(fs: Seq[Filter], rf: Filter): Seq[Filter] = + fs.filterNot { f => + equals(f, rf) || rf.kind == LevelKind && f.kind == ProgramKind + } } trait FilterFactory[T] { @@ -59,9 +65,18 @@ object FilterFactory { implicit object ProgramFilter extends FilterFactory[Program] { def create(program: Program): Filter = new Filter { - def filter(book: Book): Boolean = book.program == program + def filter(book: Book): Boolean = book.programs.contains(program) val kind: FilterKind = ProgramKind val name: String = program.toString() } } + + implicit object LevelFilter extends FilterFactory[Level] { + def create(level: Level): Filter = + new Filter { + def filter(book: Book): Boolean = book.programs.map(Program.level).contains(level) + val kind: FilterKind = LevelKind + val name: String = level.toString() + } + } } |