launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java
branchdew
changeset 466 d6b1f996c0d8
parent 465 443eb0f21a0a
child 468 a7ff47e054f3
     1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Wed Jan 16 11:36:19 2013 +0100
     1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Wed Jan 16 12:25:50 2013 +0100
     1.3 @@ -5,10 +5,13 @@
     1.4  package org.apidesign.bck2brwsr.dew;
     1.5  
     1.6  import java.io.ByteArrayInputStream;
     1.7 +import java.io.DataOutputStream;
     1.8  import java.io.IOException;
     1.9  import java.io.InputStream;
    1.10  import java.io.InputStreamReader;
    1.11  import java.io.OutputStream;
    1.12 +import java.io.OutputStreamWriter;
    1.13 +import java.io.Writer;
    1.14  import java.util.List;
    1.15  import java.util.logging.Logger;
    1.16  import javax.tools.Diagnostic;
    1.17 @@ -26,33 +29,7 @@
    1.18   * @author phrebejk
    1.19   */
    1.20  public class Dew extends HttpHandler {
    1.21 -    private String html = "<html><body>\n"
    1.22 -        + " <button id='btn'>Hello!</button>\n"
    1.23 -        + " <hr/>\n"
    1.24 -        + "\n"
    1.25 -        + "\n"
    1.26 -        + "\n"
    1.27 -        + " <script src=\"/bck2brwsr.js\"></script>\n"
    1.28 -        + " <script type=\"text/javascript\">\n"
    1.29 -        + "   function ldCls(res) {\n"
    1.30 -        + "     var request = new XMLHttpRequest();\n"
    1.31 -        + "     request.open('GET', '/dew/classes/' + res, false);\n"
    1.32 -        + "     request.send();\n"
    1.33 -        + "     var arr = eval('(' + request.responseText + ')');\n"
    1.34 -        + "     return arr;\n"
    1.35 -        + "   }\n"
    1.36 -        + " //  var vm = new bck2brwsr(ldCls);\n"
    1.37 -        + " //  vm.loadClass('bck2brwsr.demo.Index');\n"
    1.38 -        + " </script>\n"
    1.39 -        + "</body></html>\n";
    1.40 -    private String java = "package bck2brwsr.demo;\n"
    1.41 -                + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n"
    1.42 -            + "@Page(xhtml=\"index.html\", className=\"Index\")\n"
    1.43 -            + "class X {\n"
    1.44 -            + "   @OnClick(id=\"btn\") static void clcs() {\n"
    1.45 -            + "     Index.BTN.setDisabled(true);\n"
    1.46 -            + "   }\n"
    1.47 -            + "}\n";
    1.48 +    private String html = "";
    1.49      private Compile data;
    1.50  
    1.51      @Override
    1.52 @@ -62,13 +39,14 @@
    1.53              InputStream is = request.getInputStream();
    1.54              JSONTokener tok = new JSONTokener(new InputStreamReader(is));
    1.55              JSONObject obj = new JSONObject(tok);
    1.56 -            html = obj.getString("html");
    1.57 -            java = obj.getString("java");
    1.58 +            String tmpHtml = obj.getString("html");
    1.59 +            String tmpJava = obj.getString("java");
    1.60              
    1.61 -            Compile res = Compile.create(html, java);
    1.62 +            Compile res = Compile.create(tmpHtml, tmpJava);
    1.63              List<Diagnostic<? extends JavaFileObject>> err = res.getErrors();
    1.64              if (err.isEmpty()) {
    1.65                  data = res;
    1.66 +                html = tmpHtml;
    1.67                  response.getOutputStream().write("[]".getBytes());
    1.68                  response.setStatus(HttpStatus.OK_200);
    1.69              } else {
    1.70 @@ -94,16 +72,34 @@
    1.71              r = r.substring(1);
    1.72          }
    1.73          if (r.startsWith("classes/")) {
    1.74 -            if (data == null) {
    1.75 -                //data = Compile.create(html, java);
    1.76 +            r = r.substring(8);
    1.77 +            byte[] arr = data == null ? null : data.get(r);
    1.78 +            if (arr == null) {
    1.79 +                response.setError();
    1.80 +                response.setDetailMessage("No data for " + r + " yet!");
    1.81 +                return;
    1.82              }
    1.83 -            r = r.substring(8);
    1.84 -            byte[] is = data == null ? null : data.get(r);
    1.85 -            if (is == null) {
    1.86 -                is = new byte[0];
    1.87 +            try (Writer w = response.getWriter()) {
    1.88 +                response.setContentType("text/javascript");
    1.89 +                w.append("[");
    1.90 +                for (int i = 0; i < arr.length; i++) {
    1.91 +                    int b = arr[i];
    1.92 +                    if (b == -1) {
    1.93 +                        break;
    1.94 +                    }
    1.95 +                    if (i > 0) {
    1.96 +                        w.append(", ");
    1.97 +                    }
    1.98 +                    if (i % 20 == 0) {
    1.99 +                        w.write("\n");
   1.100 +                    }
   1.101 +                    if (b > 127) {
   1.102 +                        b = b - 256;
   1.103 +                    }
   1.104 +                    w.append(Integer.toString(b));
   1.105 +                }
   1.106 +                w.append("\n]");
   1.107              }
   1.108 -            OutputStream os = response.getOutputStream();
   1.109 -            copyStream(new ByteArrayInputStream(is), os, request.getRequestURL().toString() );
   1.110              return;
   1.111          }
   1.112