Skip to content

Instantly share code, notes, and snippets.

@andrei15
Created May 28, 2013 11:56
Show Gist options
  • Save andrei15/5662218 to your computer and use it in GitHub Desktop.
Save andrei15/5662218 to your computer and use it in GitHub Desktop.
import _root_.freemarker.template._
import circumflex._, freemarker._
import org.bson._, types._
import collection.JavaConversions._
class ExtendedObjectWrapper extends ScalaObjectWrapper {
override def wrap(obj: Any) = obj match {
case null => null
case list: BasicBSONList =>
new BSONListWrapper(list, this)
case bson: BSONObject =>
new BSONWrapper(bson, this)
case _ => super.wrap(obj)
}
}
class BSONWrapper(val bson: BSONObject, val wrapper: ObjectWrapper)
extends TemplateHashModelEx
with TemplateScalarModel {
def size = bson.keySet.size
def isEmpty = size == 0
def keys = new ScalaIterableWrapper[Any](
bson.keySet.toStream, wrapper)
def values = new ScalaIterableWrapper[Any](
bson.toMap.valuesIterator.toStream, wrapper)
def get(key: String) = wrapper.wrap(bson.get(key))
def getAsString = bson.toString
}
class BSONListWrapper(val list: BasicBSONList,
val wrapper: ObjectWrapper)
extends TemplateSequenceModel {
def get(index: Int) = wrapper.wrap(list.get(index))
def size = list.size
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment