Serve byte code as JSON. Initialize the fields in JavaScript.
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package org.apidesign.bck2brwsr.dew;
7 import java.io.ByteArrayInputStream;
8 import java.io.DataOutputStream;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.io.OutputStream;
13 import java.io.OutputStreamWriter;
14 import java.io.Writer;
15 import java.util.List;
16 import java.util.logging.Logger;
17 import javax.tools.Diagnostic;
18 import javax.tools.JavaFileObject;
19 import org.glassfish.grizzly.http.Method;
20 import org.glassfish.grizzly.http.server.HttpHandler;
21 import org.glassfish.grizzly.http.server.Request;
22 import org.glassfish.grizzly.http.server.Response;
23 import org.glassfish.grizzly.http.util.HttpStatus;
24 import org.json.JSONObject;
25 import org.json.JSONTokener;
31 public class Dew extends HttpHandler {
32 private String html = "";
36 public void service(Request request, Response response) throws Exception {
38 if ( request.getMethod() == Method.POST ) {
39 InputStream is = request.getInputStream();
40 JSONTokener tok = new JSONTokener(new InputStreamReader(is));
41 JSONObject obj = new JSONObject(tok);
42 String tmpHtml = obj.getString("html");
43 String tmpJava = obj.getString("java");
45 Compile res = Compile.create(tmpHtml, tmpJava);
46 List<Diagnostic<? extends JavaFileObject>> err = res.getErrors();
50 response.getOutputStream().write("[]".getBytes());
51 response.setStatus(HttpStatus.OK_200);
53 response.getOutputStream().write(("[errors:'" + err + "']").getBytes());
54 response.setStatus(HttpStatus.PRECONDITION_FAILED_412);
60 String r = request.getHttpHandlerPath();
61 if (r == null || r.equals("/")) {
64 if (r.equals("/result.html")) {
65 response.setContentType("text/html");
66 response.getOutputBuffer().write(html);
67 response.setStatus(HttpStatus.OK_200);
71 if (r.startsWith("/")) {
74 if (r.startsWith("classes/")) {
76 byte[] arr = data == null ? null : data.get(r);
79 response.setDetailMessage("No data for " + r + " yet!");
82 try (Writer w = response.getWriter()) {
83 response.setContentType("text/javascript");
85 for (int i = 0; i < arr.length; i++) {
99 w.append(Integer.toString(b));
106 if (r.endsWith(".html") || r.endsWith(".xhtml")) {
107 response.setContentType("text/html");
109 OutputStream os = response.getOutputStream();
110 try (InputStream is = Dew.class.getResourceAsStream(r) ) {
111 copyStream(is, os, request.getRequestURL().toString() );
112 } catch (IOException ex) {
113 response.setDetailMessage(ex.getLocalizedMessage());
115 response.setStatus(404);
118 private static final Logger LOG = Logger.getLogger(Dew.class.getName());
120 static void copyStream(InputStream is, OutputStream os, String baseURL) throws IOException {