scala-news-reader

rss/atom news reader in scala

git clone https://9o.is/git/scala-news-reader.git

BlogWriterUserListField.scala

(1864B)


      1 package com.joereader.model.field
      2 
      3 import com.mongodb._
      4 import net.liftweb._
      5 import common._
      6 import mongodb.record._
      7 import field._
      8 
      9 import com.joereader.model._
     10 
     11 class BlogWriterUserListField[OwnerType <: BsonRecord[OwnerType]](rec: OwnerType)
     12   extends MongoListField[OwnerType, BlogWriterUser](rec)
     13   with MongoListFieldExtra[OwnerType, BlogWriterUser] {
     14 
     15   import scala.collection.JavaConversions._
     16   import BlogWriterUser._
     17 
     18   override def asDBObject: DBObject = {
     19     val dbl = new BasicDBList
     20     value.foreach { v => dbl.add(v.toString) }
     21     dbl
     22   }
     23 
     24   override def setFromDBObject(dbo: DBObject): Box[List[BlogWriterUser]] =
     25     setBox(Full(dbo.keySet.toList.map(k => {
     26       BlogWriterUser.fromString(dbo.get(k.toString).asInstanceOf[String])
     27     })))
     28 
     29   /* Random amount of unique blog writer users. */
     30   def random(n: Int): List[BlogWriterUser] =
     31     uniqueOnly {
     32       if (get.size > 0) {
     33         val random =
     34           Seq.fill(n)(scala.util.Random.nextInt(get.size)).distinct
     35         random.map(get)
     36       } else Nil
     37     }
     38 
     39   /* All blog writer users. Uniqueness assured. */
     40   def allUsers: List[BlogWriterUser] =
     41     uniqueOnly((0 until get.size).map(get))
     42 
     43   /* 
     44    * All Users that are followed by their shared articles (sa). 
     45    * We determine this by checking if user is the only defined
     46    * value in BlogWriterUser container.
     47    */
     48   def usersSharedArticles: List[User] =
     49     (0 until get.size).map { i =>
     50       val bwu = get(i)
     51       if (bwu.user.isDefined &&
     52         bwu.blog.isEmpty &&
     53         bwu.blogWriter.isEmpty)
     54         Box(get(i).user)
     55       else
     56         Empty
     57     }.flatten.toList
     58 
     59   /* Is the BlogWriter in this list? */
     60   def exists(bw: BlogWriter, blog: Blog): Boolean =
     61     get.exists(_.toString == create(bw, blog))
     62 
     63   /* Is the User in this list? */
     64   def exists(u: User): Boolean =
     65     get.exists(_.toString == create(u))
     66 }