# HG changeset patch # User Jaroslav Tulach # Date 1367176624 -7200 # Node ID bd80952bfd11716df0dd33b0ee495257683b1179 # Parent 33b2625bf03ac86497a359de550c8de221808687 Using profiles. Twitter demo can execute and test properly in FX profile now diff -r 33b2625bf03a -r bd80952bfd11 javaquery/demo-twitter/pom.xml --- a/javaquery/demo-twitter/pom.xml Sun Apr 28 20:31:31 2013 +0200 +++ b/javaquery/demo-twitter/pom.xml Sun Apr 28 21:17:04 2013 +0200 @@ -12,10 +12,10 @@ 0.7-SNAPSHOT jar - Bck2Brwsr's Twttr + Fx/Bck2Brwsr's Twttr Rewrite of knockoutjs example to use model written in Java and - execute using Bck2Brwsr virtual machine. + execute using FxBrwsr or Bck2Brwsr. @@ -48,89 +48,85 @@ - - org.apidesign.bck2brwsr - bck2brwsr-maven-plugin - ${project.version} - - - - brwsr - j2js - - - - - org/apidesign/bck2brwsr/demo/twitter/index.html - ${project.build.directory}/bck2brwsr.js - ${bck2brwsr.obfuscationlevel} - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - true - lib/ - - - - - - org.apache.maven.plugins - maven-deploy-plugin - 2.7 - - true - - - - maven-assembly-plugin - 2.4 - - - distro-assembly - package - - single - - - - bck2brwsr-assembly.xml - - - - - + + org.apidesign.bck2brwsr + bck2brwsr-maven-plugin + ${project.version} + + + + brwsr + + + + + org/apidesign/bck2brwsr/demo/twitter/index.html + ${brwsr} + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.14.1 + + + ${brwsr} + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + lib/ + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.7 + + true + + + + maven-assembly-plugin + 2.4 + + + distro-assembly + package + + single + + + + bck2brwsr-assembly.xml + + + + + - org.apidesign.bck2brwsr - emul - ${project.version} - rt - - - org.apidesign.bck2brwsr - javaquery.api - ${project.version} - runtime - - org.testng testng 6.5.2 @@ -143,16 +139,91 @@ test - ${project.groupId} - launcher.http - ${project.version} - test - - org.apidesign.html net.java.html.json 0.1-SNAPSHOT jar + + + fxbrwsr + + true + + + fxbrwsr + + + + org.apidesign.html + ko-fx + 0.1-SNAPSHOT + + + ${project.groupId} + launcher.fx + ${project.version} + test + + + + + bck2brwsr + + + brwsr + bck2brwsr + + + + + + org.apidesign.bck2brwsr + bck2brwsr-maven-plugin + + + + j2js + + + + + ${project.build.directory}/bck2brwsr.js + ${bck2brwsr.obfuscationlevel} + + + + org.apache.maven.plugins + maven-compiler-plugin + + + netbeans.ignore.jdk.bootclasspath + + + + + + + + org.apidesign.bck2brwsr + emul + ${project.version} + rt + + + org.apidesign.bck2brwsr + javaquery.api + ${project.version} + runtime + + + ${project.groupId} + launcher.http + ${project.version} + test + + + + diff -r 33b2625bf03a -r bd80952bfd11 launcher/api/src/main/java/org/apidesign/bck2brwsr/launcher/Launcher.java --- a/launcher/api/src/main/java/org/apidesign/bck2brwsr/launcher/Launcher.java Sun Apr 28 20:31:31 2013 +0200 +++ b/launcher/api/src/main/java/org/apidesign/bck2brwsr/launcher/Launcher.java Sun Apr 28 21:17:04 2013 +0200 @@ -82,12 +82,16 @@ String msg = "Trying to create browser '" + cmd + "'"; try { Class c; - if ("fx".equals(cmd)) { // NOI18N + if ("fxbrwsr".equals(cmd)) { // NOI18N msg = "Please include org.apidesign.bck2brwsr:launcher.fx dependency!"; c = loadClass("org.apidesign.bck2brwsr.launcher.FXBrwsrLauncher"); // NOI18N } else { msg = "Please include org.apidesign.bck2brwsr:launcher.html dependency!"; c = loadClass("org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher"); // NOI18N + if ("bck2brwsr".equals(cmd)) { // NOI18N + // use default executable + cmd = null; + } } Constructor cnstr = c.getConstructor(String.class); return (Launcher) cnstr.newInstance(cmd); @@ -107,7 +111,22 @@ * @throws IOException if something goes wrong */ public static Closeable showURL(ClassLoader classes, String startpage) throws IOException { - Launcher l = createBrowser(null); + return showURL(null, classes, startpage); + } + /** Starts an HTTP server which provides access to classes and resources + * available in the classes URL and shows a start page + * available as {@link ClassLoader#getResource(java.lang.String)} from the + * provide classloader. Opens a browser with URL showing the start page. + * + * @param brwsr name of browser to use or null + * @param classes classloader offering access to classes and resources + * @param startpage page to show in the browser + * @return interface that allows one to stop the server + * @throws IOException if something goes wrong + * @since 0.7 + */ + public static Closeable showURL(String brwsr, ClassLoader classes, String startpage) throws IOException { + Launcher l = createBrowser(brwsr); l.addClassLoader(classes); l.showURL(startpage); return (Closeable) l; diff -r 33b2625bf03a -r bd80952bfd11 launcher/fx/pom.xml --- a/launcher/fx/pom.xml Sun Apr 28 20:31:31 2013 +0200 +++ b/launcher/fx/pom.xml Sun Apr 28 21:17:04 2013 +0200 @@ -45,10 +45,5 @@ system ${java.home}/lib/jfxrt.jar - - ${project.groupId} - vm4brwsr - ${project.version} - diff -r 33b2625bf03a -r bd80952bfd11 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Sun Apr 28 20:31:31 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Sun Apr 28 21:17:04 2013 +0200 @@ -41,7 +41,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apidesign.bck2brwsr.launcher.InvocationContext.Resource; -import org.apidesign.vm4brwsr.Bck2Brwsr; import org.glassfish.grizzly.PortRange; import org.glassfish.grizzly.http.server.HttpHandler; import org.glassfish.grizzly.http.server.HttpServer; @@ -56,7 +55,7 @@ * Supports execution in native browser as well as Java's internal * execution engine. */ -class BaseHTTPLauncher extends Launcher implements Closeable { +abstract class BaseHTTPLauncher extends Launcher implements Closeable { private static final Logger LOG = Logger.getLogger(BaseHTTPLauncher.class.getName()); private static final InvocationContext END = new InvocationContext(null, null, null); private final Set loaders = new LinkedHashSet<>(); @@ -70,7 +69,7 @@ public BaseHTTPLauncher(String cmd) { this.cmd = cmd; - addClassLoader(Bck2Brwsr.class.getClassLoader()); + addClassLoader(BaseHTTPLauncher.class.getClassLoader()); setTimeout(180000); } @@ -455,29 +454,9 @@ } } - void generateBck2BrwsrJS(StringBuilder sb, Bck2Brwsr.Resources loader) throws IOException { - Bck2Brwsr.generate(sb, loader); - sb.append( - "(function WrapperVM(global) {" - + " function ldCls(res) {\n" - + " var request = new XMLHttpRequest();\n" - + " request.open('GET', '/classes/' + res, false);\n" - + " request.send();\n" - + " if (request.status !== 200) return null;\n" - + " var arr = eval('(' + request.responseText + ')');\n" - + " return arr;\n" - + " }\n" - + " var prevvm = global.bck2brwsr;\n" - + " global.bck2brwsr = function() {\n" - + " var args = Array.prototype.slice.apply(arguments);\n" - + " args.unshift(ldCls);\n" - + " return prevvm.apply(null, args);\n" - + " };\n" - + "})(this);\n"); - } + abstract void generateBck2BrwsrJS(StringBuilder sb, Object loader) throws IOException; - private class Res implements Bck2Brwsr.Resources { - @Override + private class Res { public InputStream get(String resource) throws IOException { for (ClassLoader l : loaders) { URL u = null; diff -r 33b2625bf03a -r bd80952bfd11 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/FXBrwsrLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/FXBrwsrLauncher.java Sun Apr 28 20:31:31 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/FXBrwsrLauncher.java Sun Apr 28 21:17:04 2013 +0200 @@ -29,7 +29,6 @@ import java.util.logging.Logger; import javafx.application.Platform; import org.apidesign.bck2brwsr.launcher.fximpl.JVMBridge; -import org.apidesign.vm4brwsr.Bck2Brwsr; /** * @@ -79,7 +78,7 @@ } @Override - void generateBck2BrwsrJS(StringBuilder sb, Bck2Brwsr.Resources loader) throws IOException { + void generateBck2BrwsrJS(StringBuilder sb, Object loader) throws IOException { sb.append("(function() {\n" + " var impl = this.bck2brwsr;\n" + " this.bck2brwsr = function() { return impl; };\n" diff -r 33b2625bf03a -r bd80952bfd11 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/Console.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/Console.java Sun Apr 28 20:31:31 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/Console.java Sun Apr 28 21:17:04 2013 +0200 @@ -27,7 +27,6 @@ import java.util.Enumeration; import javafx.scene.web.WebEngine; import netscape.javascript.JSObject; -import org.apidesign.bck2brwsr.core.JavaScriptBody; /** * @@ -37,24 +36,17 @@ public Console() { } - @JavaScriptBody(args = {"elem", "attr"}, body = - "return elem[attr].toString();") private static Object getAttr(Object elem, String attr) { return InvokeJS.CObject.call("getAttr", elem, attr); } - @JavaScriptBody(args = {"id", "attr", "value"}, body = - "window.document.getElementById(id)[attr] = value;") private static void setAttr(String id, String attr, Object value) { InvokeJS.CObject.call("setAttrId", id, attr, value); } - @JavaScriptBody(args = {"elem", "attr", "value"}, body = - "elem[attr] = value;") private static void setAttr(Object id, String attr, Object value) { InvokeJS.CObject.call("setAttr", id, attr, value); } - @JavaScriptBody(args = {}, body = "return; window.close();") private static void closeWindow() {} private static Object textArea; @@ -113,7 +105,6 @@ + "arr[0] = pre;\n" + "arr[1] = status;\n"; - @JavaScriptBody(args = { "test", "c", "arr" }, body = BEGIN_TEST) private static void beginTest(String test, Case c, Object[] arr) { InvokeJS.CObject.call("beginTest", test, c, arr); } @@ -130,7 +121,6 @@ + " } catch (e) { alert(e); }" + "};" + "request.send();"; - @JavaScriptBody(args = { "url", "callback", "arr" }, body = LOAD_TEXT) private static void loadText(String url, Runnable callback, String[] arr) throws IOException { InvokeJS.CObject.call("loadText", url, new Run(callback), arr); } @@ -257,12 +247,9 @@ } } - @JavaScriptBody(args = {}, body = "vm.desiredAssertionStatus = true;") private static void turnAssetionStatusOn() { } - @JavaScriptBody(args = {"r", "time"}, body = - "return window.setTimeout(function() { r.run__V(); }, time);") private static Object schedule(Runnable r, int time) { return InvokeJS.CObject.call("schedule", new Run(r), time); } @@ -362,16 +349,10 @@ return res; } - @JavaScriptBody(args = "s", body = "return eval('(' + s + ')');") private static Object toJSON(String s) { return InvokeJS.CObject.call("toJSON", s); } - @JavaScriptBody(args = {"p", "d"}, body = - "var v = d[p];\n" - + "if (typeof v === 'undefined') return null;\n" - + "return v.toString();" - ) private static Object value(String p, Object d) { return ((JSObject)d).getMember(p); } @@ -388,7 +369,6 @@ private static final class InvokeJS { static final JSObject CObject = initJS(); - @JavaScriptBody(args = { }, body = "return null;") private static JSObject initJS() { WebEngine web = (WebEngine) System.getProperties().get("webEngine"); return (JSObject) web.executeScript("(function() {" diff -r 33b2625bf03a -r bd80952bfd11 rt/mojo/pom.xml --- a/rt/mojo/pom.xml Sun Apr 28 20:31:31 2013 +0200 +++ b/rt/mojo/pom.xml Sun Apr 28 21:17:04 2013 +0200 @@ -86,5 +86,10 @@ launcher.http ${project.version} + + ${project.groupId} + launcher.fx + ${project.version} + diff -r 33b2625bf03a -r bd80952bfd11 rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/BrswrMojo.java --- a/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/BrswrMojo.java Sun Apr 28 20:31:31 2013 +0200 +++ b/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/BrswrMojo.java Sun Apr 28 21:17:04 2013 +0200 @@ -41,6 +41,15 @@ public class BrswrMojo extends AbstractMojo { public BrswrMojo() { } + + /** The identification of a launcher to use. Known values fxbrwsr, + * bck2brwsr, or + * name of an external process to execute. + */ + @Parameter + private String launcher; + + /** Resource to show as initial page */ @Parameter private String startpage; @@ -69,7 +78,7 @@ } else { URLClassLoader url = buildClassLoader(classes, prj.getDependencyArtifacts()); try { - httpServer = Launcher.showURL(url, startpage()); + httpServer = Launcher.showURL(launcher, url, startpage()); } catch (Exception ex) { throw new MojoExecutionException("Can't open " + startpage(), ex); }