package app
import util.Validations._
import org.scalatra._
import org.scalatra.json._
import org.json4s._
import org.json4s.jackson._
/**
* Provides generic features for ScalatraServlet implementations.
*/
abstract class ServletBase extends ScalatraServlet with JacksonJsonSupport {
implicit val jsonFormats = DefaultFormats
// TODO get from session
val LoginUser = System.getProperty("user.name")
def get[T](path: String, form: MappingValueType[T])(action: T => Any) = {
super.get(path){
withValidation(form, params){ obj: T =>
action(obj)
}
}
registerValidate(path, form)
}
def post[T](path: String, form: MappingValueType[T])(action: T => Any) = {
super.post(path){
withValidation(form, params){ obj: T =>
action(obj)
}
}
registerValidate(path, form)
}
private def registerValidate[T](path: String, form: MappingValueType[T]) = {
super.post(path.replaceFirst("/$", "") + "/validate"){
contentType = "application/json"
form.validateAsJSON(params)
}
}
}