aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/reading/models/Filter.scala
diff options
context:
space:
mode:
authorJoris2017-01-01 19:18:45 +0100
committerJoris2017-01-01 19:18:45 +0100
commit97206cf6e709dd750a75af5bb79251198be4546c (patch)
tree105b8df7838ece415afd9da81fbceb441b486d4e /src/main/scala/reading/models/Filter.scala
parent555b621b618e4810324a2658d33315b05157e6be (diff)
downloadreading-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.scala17
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()
+ }
+ }
}