<http://10gen.com>
package org.bson
package collection
import org.bson.util._
import org.bson.io.OutputBuffer
import org.bson.types.ObjectId
import com.twitter.util.{Future , SimplePool}
import java.io.InputStream
object `package` {
TODO
TODO
val defaultSerializerPool = new ThreadLocal(new SimplePool(for (i <- 0 until 10) yield new DefaultBSONSerializer)) todo
val defaultDeserializerPool = new ThreadLocal(new SimplePool(for (i <- 0 until 10) yield new DefaultBSONDeserializer)) todo
trait SerializableBSONDocumentLike[T <: BSONDocument] extends SerializableBSONObject[T] with Logging {
def encode(doc: T, out: OutputBuffer) = {
val serializer = defaultSerializerPool().reserve()()
serializer.encode(doc, out)
serializer.done
defaultSerializerPool().release(serializer)
}
def encode(doc: T): Array[Byte] = {
val serializer = defaultSerializerPool().reserve()()
val bytes = serializer.encode(doc)
serializer.done
defaultSerializerPool().release(serializer)
bytes
}
def decode(in: InputStream): T = {
val deserializer = defaultDeserializerPool().reserve()()
val doc = deserializer.decodeAndFetch(in).asInstanceOf[T]
defaultDeserializerPool().reserve()()
doc
}
def checkObject(doc: T, isQuery: Boolean = false) = if (!isQuery) checkKeys(doc)
def checkKeys(doc: T) {
TODO
TODO
TODO
for (k <- doc.keys) {
require(!(k contains "."), "Fields to be stored in MongoDB may not contain '.', which is a reserved character. Offending Key: " + k)
require(!(k startsWith "$"), "Fields to be stored in MongoDB may not start with '$', which is a reserved character. Offending Key: " + k)
if (doc.get(k).isInstanceOf[BSONDocument]) checkKeys(doc(k).asInstanceOf[T])
}
}
def checkID(doc: T) = doc.get("_id") match {
case Some(oid: ObjectId) => {
log.debug("Found an existing OID")
oid.notNew()
}
case Some(other) => {
log.debug("Found a non-OID ID")
}
case None => {
val oid = new ObjectId()
doc.put("_id", oid)
log.trace("no ObjectId. Generated: %s", doc.get("_id"))
}
}
def _id(doc: T): Option[AnyRef] = doc.getAs[AnyRef]("_id")
}
implicit object SerializableDocument extends SerializableBSONDocumentLike[Document]
implicit object SerializableOrderedDocument extends SerializableBSONDocumentLike[OrderedDocument]
implicit object SerializableBSONList extends SerializableBSONDocumentLike[BSONList]
}