(refs #32)Provide generic layout and context to custom actions

This commit is contained in:
Naoki Takezoe
2014-06-07 18:53:07 +09:00
parent b0b318ce30
commit e5bf90ed26

View File

@@ -3,8 +3,12 @@ package servlet
import javax.servlet._
import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
import org.apache.commons.io.IOUtils
import twirl.api.Html
import service.SystemSettingsService
import model.Account
import util.Keys
class PluginActionInvokeFilter extends Filter {
class PluginActionInvokeFilter extends Filter with SystemSettingsService {
def init(config: FilterConfig) = {}
@@ -14,19 +18,22 @@ class PluginActionInvokeFilter extends Filter {
(req, res) match {
case (request: HttpServletRequest, response: HttpServletResponse) => {
val path = req.asInstanceOf[HttpServletRequest].getRequestURI
//println(req.asInstanceOf[HttpServletRequest].getContextPath)
//println(req.asInstanceOf[HttpServletRequest].getRequestURL)
val action = plugin.PluginSystem.actions.find(_.path == path)
if(action.isDefined){
val result = action.get.function(request, response)
result match {
case x: String => {
response.setContentType("text/plain; charset=UTF-8")
IOUtils.write(x.getBytes("UTF-8"), response.getOutputStream)
response.setContentType("text/html; charset=UTF-8")
val loginAccount = request.getSession.getAttribute(Keys.Session.LoginAccount).asInstanceOf[Account]
val context = app.Context(loadSystemSettings(), Option(loginAccount), request)
val html = _root_.html.main("GitBucket", None)(Html(x))(context)
IOUtils.write(html.toString.getBytes("UTF-8"), response.getOutputStream)
}
case x => {
// TODO returns as JSON?
response.setContentType("application/json; charset=UTF-8")
}
}
} else {