1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Sat Dec 15 22:15:53 2012 +0100
1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Sat Dec 15 22:46:26 2012 +0100
1.3 @@ -18,12 +18,14 @@
1.4 package org.apidesign.bck2brwsr.launcher;
1.5
1.6 import java.awt.Desktop;
1.7 +import java.io.IOException;
1.8 import java.io.InputStream;
1.9 import java.io.OutputStream;
1.10 import java.io.Writer;
1.11 import java.net.URI;
1.12 import java.net.URL;
1.13 import java.util.Enumeration;
1.14 +import static org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher.copyStream;
1.15 import org.apidesign.vm4brwsr.Bck2Brwsr;
1.16 import org.glassfish.grizzly.PortRange;
1.17 import org.glassfish.grizzly.http.server.HttpHandler;
1.18 @@ -42,15 +44,31 @@
1.19 final ClassLoader loader = Bck2BrwsrLauncher.class.getClassLoader();
1.20
1.21 final ServerConfiguration conf = server.getServerConfiguration();
1.22 - conf.addHttpHandler(new Console(), "/console");
1.23 + conf.addHttpHandler(new Console("org.apidesign.bck2brwsr.launcher.Console", "welcome", "false"), "/console");
1.24 conf.addHttpHandler(new VM(loader), "/bck2brwsr.js");
1.25 conf.addHttpHandler(new Classes(loader), "/classes/");
1.26 + conf.addHttpHandler(new HttpHandler() {
1.27 + @Override
1.28 + public void service(Request request, Response response) throws Exception {
1.29 + String clazz = request.getParameter("class");
1.30 + String method = request.getParameter("method");
1.31 + if (clazz == null || method == null) {
1.32 + response.setError();
1.33 + response.setDetailMessage("Need two parameters: class and method name!");
1.34 + return;
1.35 + }
1.36 + response.setContentType("text/html");
1.37 + OutputStream os = response.getOutputStream();
1.38 + InputStream is = Bck2BrwsrLauncher.class.getResourceAsStream("console.xhtml");
1.39 + copyStream(is, os, clazz, method, "true");
1.40 + }
1.41 + }, "/execute");
1.42
1.43 server.start();
1.44 NetworkListener listener = server.getListeners().iterator().next();
1.45 int port = listener.getPort();
1.46
1.47 - URI uri = new URI("http://localhost:" + port + "/console");
1.48 + URI uri = new URI("http://localhost:" + port + "/execute?class=org.apidesign.bck2brwsr.launcher.Console&method=welcome");
1.49 try {
1.50 Desktop.getDesktop().browse(uri);
1.51 } catch (UnsupportedOperationException ex) {
1.52 @@ -62,9 +80,29 @@
1.53
1.54 System.in.read();
1.55 }
1.56 +
1.57 + static void copyStream(InputStream is, OutputStream os, String... params) throws IOException {
1.58 + for (;;) {
1.59 + int ch = is.read();
1.60 + if (ch == -1) {
1.61 + break;
1.62 + }
1.63 + if (ch == '$') {
1.64 + int cnt = is.read() - '0';
1.65 + if (cnt < params.length) {
1.66 + os.write(params[cnt].getBytes());
1.67 + }
1.68 + } else {
1.69 + os.write(ch);
1.70 + }
1.71 + }
1.72 + }
1.73
1.74 private static class Console extends HttpHandler {
1.75 - public Console() {
1.76 + private final String[] args;
1.77 +
1.78 + public Console(String... args) {
1.79 + this.args = args;
1.80 }
1.81
1.82 @Override
1.83 @@ -72,13 +110,7 @@
1.84 response.setContentType("text/html");
1.85 OutputStream os = response.getOutputStream();
1.86 InputStream is = Bck2BrwsrLauncher.class.getResourceAsStream("console.xhtml");
1.87 - for (;;) {
1.88 - int ch = is.read();
1.89 - if (ch == -1) {
1.90 - break;
1.91 - }
1.92 - os.write(ch);
1.93 - }
1.94 + copyStream(is, os, args);
1.95 }
1.96 }
1.97
2.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/launcher/console.xhtml Sat Dec 15 22:15:53 2012 +0100
2.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/launcher/console.xhtml Sat Dec 15 22:46:26 2012 +0100
2.3 @@ -38,17 +38,23 @@
2.4 <h1>Bck2Browser Console Launcher</h1>
2.5
2.6 Class Name:
2.7 - <input id="clazz" value="org.apidesign.bck2brwsr.launcher.Console"/>
2.8 + <input id="clazz" value="$0"/>
2.9 <br/>
2.10 Method Name:
2.11
2.12 - <input id="method" value="welcome"/>
2.13 + <input id="method" value="$1"/>
2.14 <br/>
2.15
2.16 <button onclick="vm.loadClass('org.apidesign.bck2brwsr.launcher.Console').execute__V();">Execute!</button>
2.17
2.18 <hr/>
2.19 - <textarea id="result" rows="10" cols="80">
2.20 + <textarea id="result" rows="10" cols="80" disabled="">
2.21 </textarea>
2.22 +
2.23 + <script type="text/javascript">
2.24 + if ($2) {
2.25 + vm.loadClass('org.apidesign.bck2brwsr.launcher.Console').execute__V();
2.26 + }
2.27 + </script>
2.28 </body>
2.29 </html>