/commons/src/main/scala/io/prediction/commons/settings/mongodb/MongoEngineInfos.scala
https://github.com/SNaaS/PredictionIO · Scala · 58 lines · 43 code · 12 blank · 3 comment · 0 complexity · 06a0d715f5ac293bb7dc7e91c660a049 MD5 · raw file
- package io.prediction.commons.settings.mongodb
- import io.prediction.commons.MongoUtils
- import io.prediction.commons.settings.{ EngineInfo, EngineInfos }
- import com.mongodb.casbah.Imports._
- /** MongoDB implementation of EngineInfos. */
- class MongoEngineInfos(db: MongoDB) extends EngineInfos {
- private val coll = db("engineInfos")
- private def dbObjToEngineInfo(dbObj: DBObject) = EngineInfo(
- id = dbObj.as[String]("_id"),
- name = dbObj.as[String]("name"),
- description = dbObj.getAs[String]("description"),
- params = (dbObj.as[DBObject]("params") map { p => (p._1, MongoParam.dbObjToParam(p._1, p._2.asInstanceOf[DBObject])) }).toMap,
- paramsections = dbObj.as[Seq[DBObject]]("paramsections") map { MongoParam.dbObjToParamSection(_) },
- defaultalgoinfoid = dbObj.as[String]("defaultalgoinfoid"),
- defaultofflineevalmetricinfoid = dbObj.as[String]("defaultofflineevalmetricinfoid"),
- defaultofflineevalsplitterinfoid = dbObj.as[String]("defaultofflineevalsplitterinfoid"))
- def insert(engineInfo: EngineInfo) = {
- // required fields
- val obj = MongoDBObject(
- "_id" -> engineInfo.id,
- "name" -> engineInfo.name,
- "params" -> (engineInfo.params mapValues { MongoParam.paramToDBObj(_) }),
- "paramsections" -> (engineInfo.paramsections map { MongoParam.paramSectionToDBObj(_) }),
- "defaultalgoinfoid" -> engineInfo.defaultalgoinfoid,
- "defaultofflineevalmetricinfoid" -> engineInfo.defaultofflineevalmetricinfoid,
- "defaultofflineevalsplitterinfoid" -> engineInfo.defaultofflineevalsplitterinfoid)
- // optional fields
- val optObj = engineInfo.description.map { d => MongoDBObject("description" -> d) } getOrElse MongoUtils.emptyObj
- coll.insert(obj ++ optObj)
- }
- def get(id: String) = coll.findOne(MongoDBObject("_id" -> id)) map { dbObjToEngineInfo(_) }
- def getAll() = coll.find().toSeq map { dbObjToEngineInfo(_) }
- def update(engineInfo: EngineInfo, upsert: Boolean = false) = {
- val idObj = MongoDBObject("_id" -> engineInfo.id)
- val requiredObj = MongoDBObject(
- "name" -> engineInfo.name,
- "params" -> (engineInfo.params mapValues { MongoParam.paramToDBObj(_) }),
- "paramsections" -> (engineInfo.paramsections map { MongoParam.paramSectionToDBObj(_) }),
- "defaultalgoinfoid" -> engineInfo.defaultalgoinfoid,
- "defaultofflineevalmetricinfoid" -> engineInfo.defaultofflineevalmetricinfoid,
- "defaultofflineevalsplitterinfoid" -> engineInfo.defaultofflineevalsplitterinfoid)
- val descriptionObj = engineInfo.description.map { d => MongoDBObject("description" -> d) } getOrElse MongoUtils.emptyObj
- coll.update(idObj, idObj ++ requiredObj ++ descriptionObj, upsert)
- }
- def delete(id: String) = coll.remove(MongoDBObject("_id" -> id))
- }