Serve byte code as JSON. Initialize the fields in JavaScript.
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
2.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Wed Jan 16 11:36:19 2013 +0100
2.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Wed Jan 16 12:25:50 2013 +0100
2.3 @@ -140,7 +140,6 @@
2.4 "org/apidesign/bck2brwsr/launcher/console.xhtml",
2.5 "org.apidesign.bck2brwsr.launcher.Console", "welcome", "false"
2.6 ), "/console");
2.7 - conf.addHttpHandler(new Dew(), "/dew/");
2.8 conf.addHttpHandler(new VM(resources), "/bck2brwsr.js");
2.9 conf.addHttpHandler(new VMInit(), "/vm.js");
2.10 conf.addHttpHandler(new Classes(resources), "/classes/");
3.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Wed Jan 16 11:36:19 2013 +0100
3.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Wed Jan 16 12:25:50 2013 +0100
3.3 @@ -71,6 +71,51 @@
3.4 }]);
3.5
3.6 function DevCtrl( $scope, $http ) {
3.7 + var templateHtml = "<html><body>\n"
3.8 + + " <button id='btn'>Hello!</button>\n"
3.9 + + " <hr/>\n"
3.10 + + "\n"
3.11 + + "\n"
3.12 + + "\n"
3.13 + + "\n"
3.14 + + "\n"
3.15 + + "\n"
3.16 + + "\n"
3.17 + + "\n"
3.18 + + "\n"
3.19 + + "\n"
3.20 + + "\n"
3.21 + + "\n"
3.22 + + "\n"
3.23 + + "\n"
3.24 + + "\n"
3.25 + + "\n"
3.26 + + "\n"
3.27 + + "\n"
3.28 + + "\n"
3.29 + + "\n"
3.30 + + " <script src=\"/bck2brwsr.js\"></script>\n"
3.31 + + " <script type=\"text/javascript\">\n"
3.32 + + " function ldCls(res) {\n"
3.33 + + " var request = new XMLHttpRequest();\n"
3.34 + + " request.open('GET', '/dew/classes/' + res, false);\n"
3.35 + + " request.send();\n"
3.36 + + " var arr = eval('(' + request.responseText + ')');\n"
3.37 + + " return arr;\n"
3.38 + + " }\n"
3.39 + + " var vm = new bck2brwsr(ldCls);\n"
3.40 + + " vm.loadClass('bck2brwsr.demo.Index');\n"
3.41 + + " </script>\n"
3.42 + + "</body></html>\n";
3.43 + var templateJava = "package bck2brwsr.demo;\n"
3.44 + + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n"
3.45 + + "@Page(xhtml=\"index.html\", className=\"Index\")\n"
3.46 + + "class YourFirstHTML5PageInRealLanguage {\n"
3.47 + + " @OnClick(id=\"btn\") static void clcs() {\n"
3.48 + + " Index.BTN.setDisabled(true);\n"
3.49 + + " }\n"
3.50 + + "}\n";
3.51 +
3.52
3.53 $scope.reload= function() {
3.54 var frame = document.getElementById("result");
3.55 @@ -88,14 +133,14 @@
3.56 };
3.57
3.58 $scope.tab = "html";
3.59 - $scope.html= "";
3.60 - $scope.java = "";
3.61 + $scope.html= templateHtml;
3.62 + $scope.java = templateJava;
3.63
3.64 $scope.tabActive = function( tab ) {
3.65 return tab === $scope.tab ? "active" : "";
3.66 };
3.67
3.68 // $scope.$watch( "html", htmlChange );
3.69 -
3.70 + $scope.post();
3.71
3.72 }