1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Jan 22 17:53:05 2013 +0100
1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Jan 22 19:16:38 2013 +0100
1.3 @@ -55,7 +55,7 @@
1.4 */
1.5 final class Bck2BrwsrLauncher extends Launcher implements Closeable {
1.6 private static final Logger LOG = Logger.getLogger(Bck2BrwsrLauncher.class.getName());
1.7 - private static final MethodInvocation END = new MethodInvocation(null, null);
1.8 + private static final MethodInvocation END = new MethodInvocation(null, null, null);
1.9 private Set<ClassLoader> loaders = new LinkedHashSet<>();
1.10 private BlockingQueue<MethodInvocation> methods = new LinkedBlockingQueue<>();
1.11 private long timeOut;
1.12 @@ -70,9 +70,9 @@
1.13 }
1.14
1.15 @Override
1.16 - public MethodInvocation addMethod(Class<?> clazz, String method) throws IOException {
1.17 + MethodInvocation addMethod(Class<?> clazz, String method, String html) throws IOException {
1.18 loaders.add(clazz.getClassLoader());
1.19 - MethodInvocation c = new MethodInvocation(clazz.getName(), method);
1.20 + MethodInvocation c = new MethodInvocation(clazz.getName(), method, html);
1.21 methods.add(c);
1.22 try {
1.23 c.await(timeOut);
1.24 @@ -174,7 +174,13 @@
1.25 + "className: '" + cn + "', "
1.26 + "methodName: '" + mn + "', "
1.27 + "request: " + cnt
1.28 - + "}");
1.29 + );
1.30 + if (mi.html != null) {
1.31 + response.getWriter().write(", html: '");
1.32 + response.getWriter().write(encodeJSON(mi.html));
1.33 + response.getWriter().write("'");
1.34 + }
1.35 + response.getWriter().write("}");
1.36 cnt++;
1.37 }
1.38 }, "/data");
1.39 @@ -182,6 +188,22 @@
1.40 this.brwsr = launchServerAndBrwsr(server, "/execute");
1.41 }
1.42
1.43 + private static String encodeJSON(String in) {
1.44 + StringBuilder sb = new StringBuilder();
1.45 + for (int i = 0; i < in.length(); i++) {
1.46 + char ch = in.charAt(i);
1.47 + if (ch < 32 || ch == '\'' || ch == '"') {
1.48 + sb.append("\\u");
1.49 + String hs = "0000" + Integer.toHexString(ch);
1.50 + hs = hs.substring(hs.length() - 4);
1.51 + sb.append(hs);
1.52 + } else {
1.53 + sb.append(ch);
1.54 + }
1.55 + }
1.56 + return sb.toString();
1.57 + }
1.58 +
1.59 @Override
1.60 public void shutdown() throws IOException {
1.61 methods.offer(END);
1.62 @@ -348,7 +370,7 @@
1.63 public Page(Res res, String resource, String... args) {
1.64 this.res = res;
1.65 this.resource = resource;
1.66 - this.args = args;
1.67 + this.args = args.length == 0 ? new String[] { "$0" } : args;
1.68 }
1.69
1.70 @Override