diff src/nabble/utils/LuanServlet.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/utils/LuanServlet.java	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,58 @@
+package nabble.utils;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import luan.Luan;
+import luan.LuanException;
+import nabble.utils.luan.HttpServicer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class LuanServlet extends HttpServlet {
+	private static final Logger logger = LoggerFactory.getLogger(LuanServlet.class);
+	protected final String uriPrefix;
+	protected final HttpServicer httpServicer;
+
+	private LuanServlet(String uriPrefix,Luan luan) {
+		this.uriPrefix = uriPrefix;
+		try {
+			luan.eval("require 'classpath:nabble/utils/init.luan'");
+		} catch(LuanException e) {
+			throw new RuntimeException(e);
+		}
+		this.httpServicer = new HttpServicer(luan);
+	}
+
+	public LuanServlet(String uriPrefix) {
+		this(uriPrefix,new Luan());
+	}
+
+	@Override protected void service(HttpServletRequest request,HttpServletResponse response)
+		throws IOException
+	{
+		String path = request.getRequestURI();
+		service(request,response,path);
+	}
+
+	public void service(HttpServletRequest request,HttpServletResponse response,String path)
+		throws IOException
+	{
+		if( !path.endsWith(".luan") )
+			throw new RuntimeException("'"+path+"' doesn't end with '.luan'");
+		String uri = uriPrefix + path;
+		try {
+			if( !httpServicer.service(request,response,uri) )
+				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+		} catch(LuanException e) {
+//			throw new RuntimeException(e);
+			String err = e.getLuanStackTraceString();
+			logger.error(err);
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"<pre>"+err+"</pre>");
+		}
+	}
+
+}