aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/reading/models/FilterFactory.scala
diff options
context:
space:
mode:
authorJoris2017-01-16 22:23:38 +0100
committerJoris2017-01-16 22:23:38 +0100
commit36fc53409c9119ac94788d8296d6b171eb0a6500 (patch)
treed75a3f3232ed73e2c9859200f5d88995d379dc08 /src/main/scala/reading/models/FilterFactory.scala
parente9e235a10cabc20ceaf110420d4618e83e425631 (diff)
downloadreading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.gz
reading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.bz2
reading-36fc53409c9119ac94788d8296d6b171eb0a6500.zip
Add navigation history with urls
Diffstat (limited to 'src/main/scala/reading/models/FilterFactory.scala')
-rw-r--r--src/main/scala/reading/models/FilterFactory.scala67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/scala/reading/models/FilterFactory.scala b/src/main/scala/reading/models/FilterFactory.scala
new file mode 100644
index 0000000..269af82
--- /dev/null
+++ b/src/main/scala/reading/models/FilterFactory.scala
@@ -0,0 +1,67 @@
+package reading.models
+
+trait FilterFactory[T] {
+ def create(in: T): Filter
+}
+
+object FilterFactory {
+ implicit object PeriodFilter extends FilterFactory[Period] {
+ def create(period: Period): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.period == Some(period)
+ val kind: FilterKind = FilterKind.Period
+ val nonFormattedName: String = period.toString()
+ val name: String = period.prettyPrint()
+ }
+ }
+
+ implicit object ThemeFilter extends FilterFactory[Theme] {
+ def create(theme: Theme): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.themes.contains(theme)
+ val kind: FilterKind = FilterKind.Theme
+ val nonFormattedName: String = theme.toString()
+ val name: String = theme.prettyPrint()
+ }
+ }
+
+ implicit object GenreFilter extends FilterFactory[Genre] {
+ def create(genre: Genre): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.genres.contains(genre)
+ val kind: FilterKind = FilterKind.Genre
+ val nonFormattedName: String = genre.toString()
+ val name: String = genre.prettyPrint()
+ }
+ }
+
+ implicit object ProgramFilter extends FilterFactory[Program] {
+ def create(program: Program): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.programs.contains(program)
+ val kind: FilterKind = FilterKind.Program
+ val nonFormattedName: String = program.toString()
+ val name: String = program.prettyPrint()
+ }
+ }
+
+ implicit object GradeFilter extends FilterFactory[Grade] {
+ def create(grade: Grade): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.programs.map(Program.grade).contains(grade)
+ val kind: FilterKind = FilterKind.Grade
+ val nonFormattedName: String = grade.toString()
+ val name: String = grade.prettyPrint()
+ }
+ }
+
+ implicit object LevelFilter extends FilterFactory[Level] {
+ def create(level: Level): Filter =
+ new Filter {
+ def filter(book: Book): Boolean = book.level == level
+ val kind: FilterKind = FilterKind.Level
+ val nonFormattedName: String = level.toString()
+ val name: String = level.prettyPrint()
+ }
+ }
+}