Guest User

Untitled

a guest
Dec 10th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. package com.owlunit.web.lib
  2.  
  3. import net.liftweb.mongodb.record.{BsonMetaRecord, BsonRecord}
  4. import java.util.HashMap
  5. import com.mongodb.{BasicDBObject, DBObject}
  6. import net.liftweb.json.JsonAST._
  7. import net.liftweb.common.{Empty, Full, Box}
  8. import net.liftweb.record.FieldHelpers
  9. import net.liftweb.record.field.StringField
  10. import net.liftweb.mongodb.record.field.{ObjectIdField, MongoMapField}
  11.  
  12.  
  13. /**
  14. * @author Anton Chebotaev
  15. * Owls Proprietary
  16. */
  17.  
  18. class BsonRecordMapField[OwnerType <: BsonRecord[OwnerType], SubRecordType <: BsonRecord[SubRecordType]](rec: OwnerType, valueMeta: BsonMetaRecord[SubRecordType])(implicit mf: Manifest[SubRecordType])
  19. extends MongoMapField[OwnerType, SubRecordType](rec: OwnerType) {
  20.  
  21. import scala.collection.JavaConversions._
  22.  
  23. override def asDBObject: DBObject = {
  24. val javaMap = new HashMap[String, DBObject]()
  25. for ((key, element) <- value) {
  26. javaMap.put(key.asInstanceOf[String], element.asDBObject)
  27. }
  28. val dbl = new BasicDBObject(javaMap)
  29. dbl
  30. }
  31.  
  32. override def setFromDBObject(dbo: DBObject): Box[Map[String, SubRecordType]] = {
  33. val mapResult: Map[String, SubRecordType] = (for ((key, dboEl) <- dbo.toMap.toSeq) yield (key.asInstanceOf[String], valueMeta.fromDBObject(dboEl.asInstanceOf[DBObject]))).toMap
  34. setBox(Full(mapResult))
  35. }
  36.  
  37.  
  38. override def asJValue = {
  39. val fieldList = (for ((key, elem) <- value) yield JField(key, elem.asJValue)).toList
  40. JObject(fieldList)
  41. }
  42.  
  43. override def setFromJValue(jvalue: JValue) = jvalue match {
  44. case JNothing | JNull if optional_? => setBox(Empty)
  45. case JObject(fieldList) => val retrievedMap = fieldList.map {
  46. field =>
  47. val key = field.name
  48. val valRetrieved = valueMeta.fromJValue(field.value) openOr valueMeta.createRecord
  49. (key, valRetrieved)
  50. }.toMap
  51. setBox(Full(retrievedMap))
  52. case other => setBox(FieldHelpers.expectedA("JObject", other))
  53. }
  54.  
  55. }
Add Comment
Please, Sign In to add comment