phrebejk@460: /* phrebejk@460: * To change this template, choose Tools | Templates phrebejk@460: * and open the template in the editor. phrebejk@460: */ phrebejk@460: package org.apidesign.bck2brwsr.dew; phrebejk@460: phrebejk@461: import java.io.ByteArrayInputStream; phrebejk@460: import java.io.IOException; phrebejk@460: import java.io.InputStream; phrebejk@461: import java.io.InputStreamReader; phrebejk@460: import java.io.OutputStream; jaroslav@465: import java.util.List; phrebejk@461: import java.util.logging.Logger; jaroslav@465: import javax.tools.Diagnostic; jaroslav@465: import javax.tools.JavaFileObject; phrebejk@461: import org.glassfish.grizzly.http.Method; phrebejk@460: import org.glassfish.grizzly.http.server.HttpHandler; phrebejk@460: import org.glassfish.grizzly.http.server.Request; phrebejk@460: import org.glassfish.grizzly.http.server.Response; phrebejk@461: import org.glassfish.grizzly.http.util.HttpStatus; phrebejk@461: import org.json.JSONObject; phrebejk@461: import org.json.JSONTokener; phrebejk@460: phrebejk@460: /** phrebejk@460: * phrebejk@460: * @author phrebejk phrebejk@460: */ phrebejk@460: public class Dew extends HttpHandler { jaroslav@465: private String html = "\n" jaroslav@465: + " \n" jaroslav@465: + "
\n" jaroslav@465: + "\n" jaroslav@465: + "\n" jaroslav@465: + "\n" jaroslav@465: + " \n" jaroslav@465: + " \n" jaroslav@465: + "\n"; jaroslav@465: private String java = "package bck2brwsr.demo;\n" jaroslav@465: + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n" jaroslav@465: + "@Page(xhtml=\"index.html\", className=\"Index\")\n" jaroslav@465: + "class X {\n" jaroslav@465: + " @OnClick(id=\"btn\") static void clcs() {\n" jaroslav@465: + " Index.BTN.setDisabled(true);\n" jaroslav@465: + " }\n" jaroslav@465: + "}\n"; jaroslav@465: private Compile data; phrebejk@460: phrebejk@460: @Override phrebejk@460: public void service(Request request, Response response) throws Exception { phrebejk@461: phrebejk@461: if ( request.getMethod() == Method.POST ) { phrebejk@461: InputStream is = request.getInputStream(); phrebejk@461: JSONTokener tok = new JSONTokener(new InputStreamReader(is)); phrebejk@461: JSONObject obj = new JSONObject(tok); phrebejk@461: html = obj.getString("html"); jaroslav@462: java = obj.getString("java"); phrebejk@461: jaroslav@465: Compile res = Compile.create(html, java); jaroslav@465: List> err = res.getErrors(); jaroslav@465: if (err.isEmpty()) { jaroslav@465: data = res; jaroslav@465: response.getOutputStream().write("[]".getBytes()); jaroslav@465: response.setStatus(HttpStatus.OK_200); jaroslav@465: } else { jaroslav@465: response.getOutputStream().write(("[errors:'" + err + "']").getBytes()); jaroslav@465: response.setStatus(HttpStatus.PRECONDITION_FAILED_412); jaroslav@465: } phrebejk@461: phrebejk@461: return; phrebejk@461: } phrebejk@461: phrebejk@460: String r = request.getHttpHandlerPath(); phrebejk@460: if (r == null || r.equals("/")) { phrebejk@460: r = "index.html"; phrebejk@460: } phrebejk@461: if (r.equals("/result.html")) { phrebejk@461: response.setContentType("text/html"); phrebejk@461: response.getOutputBuffer().write(html); phrebejk@461: response.setStatus(HttpStatus.OK_200); phrebejk@461: return; phrebejk@461: } phrebejk@461: phrebejk@460: if (r.startsWith("/")) { phrebejk@460: r = r.substring(1); phrebejk@460: } jaroslav@465: if (r.startsWith("classes/")) { jaroslav@465: if (data == null) { jaroslav@465: //data = Compile.create(html, java); jaroslav@465: } jaroslav@465: r = r.substring(8); jaroslav@465: byte[] is = data == null ? null : data.get(r); jaroslav@465: if (is == null) { jaroslav@465: is = new byte[0]; jaroslav@465: } jaroslav@465: OutputStream os = response.getOutputStream(); jaroslav@465: copyStream(new ByteArrayInputStream(is), os, request.getRequestURL().toString() ); jaroslav@465: return; jaroslav@465: } jaroslav@465: phrebejk@460: if (r.endsWith(".html") || r.endsWith(".xhtml")) { phrebejk@460: response.setContentType("text/html"); phrebejk@460: } phrebejk@460: OutputStream os = response.getOutputStream(); phrebejk@460: try (InputStream is = Dew.class.getResourceAsStream(r) ) { phrebejk@460: copyStream(is, os, request.getRequestURL().toString() ); phrebejk@460: } catch (IOException ex) { phrebejk@460: response.setDetailMessage(ex.getLocalizedMessage()); phrebejk@460: response.setError(); phrebejk@460: response.setStatus(404); phrebejk@460: } phrebejk@460: } phrebejk@461: private static final Logger LOG = Logger.getLogger(Dew.class.getName()); phrebejk@460: phrebejk@460: static void copyStream(InputStream is, OutputStream os, String baseURL) throws IOException { phrebejk@460: for (;;) { phrebejk@460: int ch = is.read(); phrebejk@460: if (ch == -1) { phrebejk@460: break; phrebejk@460: } phrebejk@460: os.write(ch); phrebejk@460: } phrebejk@460: } phrebejk@460: phrebejk@460: }