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 }