Trying to server real HTML and Java code dew
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 16 Jan 2013 11:36:19 +0100
branchdew
changeset 465443eb0f21a0a
parent 464 9823859d253a
child 466 d6b1f996c0d8
Trying to server real HTML and Java code
launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java
launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
     1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Wed Jan 16 11:07:28 2013 +0100
     1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Wed Jan 16 11:36:19 2013 +0100
     1.3 @@ -5,12 +5,14 @@
     1.4  package org.apidesign.bck2brwsr.dew;
     1.5  
     1.6  import java.io.ByteArrayInputStream;
     1.7 -import java.io.ByteArrayOutputStream;
     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.util.List;
    1.13  import java.util.logging.Logger;
    1.14 +import javax.tools.Diagnostic;
    1.15 +import javax.tools.JavaFileObject;
    1.16  import org.glassfish.grizzly.http.Method;
    1.17  import org.glassfish.grizzly.http.server.HttpHandler;
    1.18  import org.glassfish.grizzly.http.server.Request;
    1.19 @@ -24,8 +26,34 @@
    1.20   * @author phrebejk
    1.21   */
    1.22  public class Dew extends HttpHandler {
    1.23 -    private String html = "Nazdar!";
    1.24 -    private String java = "class C {\n}\n";
    1.25 +    private String html = "<html><body>\n"
    1.26 +        + " <button id='btn'>Hello!</button>\n"
    1.27 +        + " <hr/>\n"
    1.28 +        + "\n"
    1.29 +        + "\n"
    1.30 +        + "\n"
    1.31 +        + " <script src=\"/bck2brwsr.js\"></script>\n"
    1.32 +        + " <script type=\"text/javascript\">\n"
    1.33 +        + "   function ldCls(res) {\n"
    1.34 +        + "     var request = new XMLHttpRequest();\n"
    1.35 +        + "     request.open('GET', '/dew/classes/' + res, false);\n"
    1.36 +        + "     request.send();\n"
    1.37 +        + "     var arr = eval('(' + request.responseText + ')');\n"
    1.38 +        + "     return arr;\n"
    1.39 +        + "   }\n"
    1.40 +        + " //  var vm = new bck2brwsr(ldCls);\n"
    1.41 +        + " //  vm.loadClass('bck2brwsr.demo.Index');\n"
    1.42 +        + " </script>\n"
    1.43 +        + "</body></html>\n";
    1.44 +    private String java = "package bck2brwsr.demo;\n"
    1.45 +                + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n"
    1.46 +            + "@Page(xhtml=\"index.html\", className=\"Index\")\n"
    1.47 +            + "class X {\n"
    1.48 +            + "   @OnClick(id=\"btn\") static void clcs() {\n"
    1.49 +            + "     Index.BTN.setDisabled(true);\n"
    1.50 +            + "   }\n"
    1.51 +            + "}\n";
    1.52 +    private Compile data;
    1.53  
    1.54      @Override
    1.55      public void service(Request request, Response response) throws Exception {
    1.56 @@ -36,11 +64,17 @@
    1.57              JSONObject obj = new JSONObject(tok);
    1.58              html = obj.getString("html");
    1.59              java = obj.getString("java");
    1.60 -            LOG.info(html);
    1.61 -            LOG.info(java);
    1.62              
    1.63 -            response.getOutputStream().write("[]".getBytes());
    1.64 -            response.setStatus(HttpStatus.OK_200);
    1.65 +            Compile res = Compile.create(html, java);
    1.66 +            List<Diagnostic<? extends JavaFileObject>> err = res.getErrors();
    1.67 +            if (err.isEmpty()) {
    1.68 +                data = res;
    1.69 +                response.getOutputStream().write("[]".getBytes());
    1.70 +                response.setStatus(HttpStatus.OK_200);
    1.71 +            } else {
    1.72 +                response.getOutputStream().write(("[errors:'" + err + "']").getBytes());
    1.73 +                response.setStatus(HttpStatus.PRECONDITION_FAILED_412);
    1.74 +            }
    1.75              
    1.76              return;
    1.77          }
    1.78 @@ -59,6 +93,20 @@
    1.79          if (r.startsWith("/")) {
    1.80              r = r.substring(1);
    1.81          }
    1.82 +        if (r.startsWith("classes/")) {
    1.83 +            if (data == null) {
    1.84 +                //data = Compile.create(html, java);
    1.85 +            }
    1.86 +            r = r.substring(8);
    1.87 +            byte[] is = data == null ? null : data.get(r);
    1.88 +            if (is == null) {
    1.89 +                is = new byte[0];
    1.90 +            }
    1.91 +            OutputStream os = response.getOutputStream();
    1.92 +            copyStream(new ByteArrayInputStream(is), os, request.getRequestURL().toString() );
    1.93 +            return;
    1.94 +        }
    1.95 +        
    1.96          if (r.endsWith(".html") || r.endsWith(".xhtml")) {
    1.97              response.setContentType("text/html");
    1.98          }
     2.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java	Wed Jan 16 11:07:28 2013 +0100
     2.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java	Wed Jan 16 11:36:19 2013 +0100
     2.3 @@ -106,6 +106,7 @@
     2.4      
     2.5      public static void main(String... args) throws Exception {
     2.6          Bck2BrwsrLauncher l = new Bck2BrwsrLauncher(null);
     2.7 +        l.addClassLoader(Bck2BrwsrLauncher.class.getClassLoader());
     2.8          HttpServer s = l.initServer();
     2.9          s.getServerConfiguration().addHttpHandler(new Dew(), "/dew/");
    2.10          l.launchServerAndBrwsr(s, "/dew/");