/src/main/scala/net/godcode/hazelbox/MongoLoader.scala

https://github.com/chrislewis/hazelbox · Scala · 56 lines · 42 code · 12 blank · 2 comment · 0 complexity · 34330fbde88abd50255641c78a0cfb7f MD5 · raw file

  1. package net.godcode.hazelbox
  2. import com.hazelcast.core.{MapLoader, MapStore}
  3. import com.mongodb.casbah.Imports._
  4. import com.novus.salat._
  5. import com.novus.salat.global._
  6. import java.{util => ju}
  7. class MongoLoader extends MapLoader[ObjectId, Person] with MapStore[ObjectId, Person] {
  8. val collection = MongoConnection("localhost")("hazelcast_mongo")("people")
  9. /* MapLoader */
  10. def loadAllKeys = new ju.HashSet[ObjectId]()
  11. def loadAll(keys: ju.Collection[ObjectId]) = {
  12. val m = new ju.HashMap[ObjectId, Person]()
  13. val it = keys.iterator
  14. while(it.hasNext) {
  15. val key = it.next
  16. m.put(key, load(key))
  17. }
  18. m
  19. }
  20. def load(key: ObjectId) = {
  21. val one = collection.findOne(MongoDBObject("_id" -> key))
  22. one.map(grater[Person].asObject(_)).getOrElse(null) // java, ftl
  23. }
  24. /* MapStore */
  25. def deleteAll(keys: ju.Collection[ObjectId]) {
  26. val it = keys.iterator
  27. while(it.hasNext)
  28. delete(it.next)
  29. }
  30. def delete(key: ObjectId) {
  31. collection.remove(MongoDBObject("_id" -> key))
  32. }
  33. def storeAll(map: ju.Map[ObjectId, Person]) {
  34. val it = map.entrySet.iterator
  35. while(it.hasNext) {
  36. val es = it.next
  37. store(es.getKey, es.getValue)
  38. }
  39. }
  40. def store(key: ObjectId, value: Person) {
  41. val dbo = grater[Person].asDBObject(value)
  42. collection.insert(dbo)
  43. }
  44. }