Advertisement
Guest User

Untitled

a guest
Apr 20th, 2014
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.70 KB | None | 0 0
  1. package com.owlbookit.shared.domain.users
  2.  
  3. import com.owlbookit.shared.util.JsonProvider
  4. import play.api.libs.json.{Writes, Reads}
  5. import play.api.Logger
  6. import scala.collection.mutable
  7. import com.owlbookit.shared.domain.users.PreferenceKeyBases.{IntPreferenceKey, BooleanPreferenceKey}
  8.  
  9. /**
  10.  * Created by ed on 4/20/14.
  11.  */
  12. case class UserPreference(userId: Long, key: Int, value: String)
  13.  
  14. class UserPreferences(val userId: Long, prefs: Iterable[UserPreference]) {
  15.   private val store: Map[PreferenceKey[_], String] = {
  16.     // this is because the functional projection decided to not ever work. flatten sucks.
  17.     val tempMap = mutable.Map[PreferenceKey[_], String]()
  18.     prefs.foreach(pref => {
  19.       UserPreferences.prefMap.get(pref.key) match {
  20.         case None => {
  21.           Logger.warn(s"User preference ")
  22.         }
  23.         case Some(key: PreferenceKey[_]) => tempMap.put(key, pref.value)
  24.       }
  25.     })
  26.     tempMap.toMap
  27.   }
  28.  
  29.   def get[B](key: PreferenceKey[B]) = store.get(key) match {
  30.     case None => key.default
  31.     case Some(v: String) => key.out(v)
  32.   }
  33.  
  34.   def set[B](key: PreferenceKey[B], value: B) = if (value == key.default) {
  35.     this
  36.   } else {
  37.     val seq = store.toSeq.map(t => UserPreference(userId, t._1.key, t._2))
  38.     val newItem = UserPreference(userId, key.key, key.in(value))
  39.     new UserPreferences(userId, seq :+ newItem)
  40.   }
  41. }
  42.  
  43. object UserPreferences extends JsonProvider[UserPreferences] {
  44.   object DummyTestPreference extends IntPreferenceKey(-1337, 42)
  45.   object WantsNewsletter extends BooleanPreferenceKey(1, true)
  46.  
  47.  
  48.  
  49.  
  50.   private val prefMap = Seq[PreferenceKey[_]](
  51.     DummyTestPreference,
  52.     WantsNewsletter
  53.   ).map(p => (p.key, p)).toMap[Int, PreferenceKey[_]]
  54.  
  55.  
  56.   override implicit val writer: Writes[UserPreferences] = ???
  57.   override implicit val reader: Reads[UserPreferences] = ???
  58. }
  59.  
  60.  
  61.  
  62.  
  63. abstract class PreferenceKey[A](val key: Int, val default: A) {
  64.   def out(value: String): A
  65.   def in(value: A): String
  66. }
  67.  
  68. object PreferenceKeyBases {
  69.   abstract class BooleanPreferenceKey(key: Int, default: Boolean)
  70.     extends PreferenceKey[Boolean](key, default) {
  71.  
  72.     override def out(value: String): Boolean = value.toBoolean
  73.     override def in(value: Boolean): String = value.toString
  74.   }
  75.   abstract class StringPreferenceKey(key: Int, default: String)
  76.     extends PreferenceKey[String](key, default) {
  77.  
  78.     override def out(value: String): String = value
  79.     override def in(value: String): String = value
  80.   }
  81.   abstract class IntPreferenceKey(key: Int, default: Int)
  82.     extends PreferenceKey[Int](key, default) {
  83.  
  84.     override def out(value: String): Int = value.toInt
  85.     override def in(value: Int): String = value.toString
  86.   }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement