package com.izmailoff.mm.util import com.izmailoff.mm.config.GlobalAppConfig.Application.MqttMongo import com.izmailoff.mm.config.SerializationFormat._ import com.mongodb.DBObject import com.mongodb.casbah.commons.MongoDBObject import org.bson.types.BasicBSONList import scala.util.{Failure, Success, Try} object DbSerialization { val PAYLOAD_FIELD = "payload" def serialize(payload: Array[Byte]): DBObject = MqttMongo.serializationFormat match { case JSON => serializeToJson(payload) case BINARY => serializeToBinary(payload) case STRING => serializeToString(payload) } def serializeToJson(payload: Array[Byte]) = parseSafe(new String(payload)) def serializeToBinary(payload: Array[Byte]) = MongoDBObject(PAYLOAD_FIELD -> payload) def serializeToString(payload: Array[Byte]) = MongoDBObject(PAYLOAD_FIELD -> new String(payload)) def parseSafe(msg: String): DBObject = Try { com.mongodb.util.JSON.parse(msg).asInstanceOf[DBObject] } match { case Failure(e) => MongoDBObject(PAYLOAD_FIELD -> msg) case Success(json) => json match { case j: BasicBSONList => MongoDBObject(PAYLOAD_FIELD -> json) case other => other } } }