1.1 --- a/boot-script/pom.xml Wed Jun 04 10:27:22 2014 +0200
1.2 +++ b/boot-script/pom.xml Wed Jun 04 10:28:17 2014 +0200
1.3 @@ -24,6 +24,15 @@
1.4 <groupId>org.netbeans.html</groupId>
1.5 <artifactId>html4j-maven-plugin</artifactId>
1.6 </plugin>
1.7 + <plugin>
1.8 + <groupId>org.apache.maven.plugins</groupId>
1.9 + <artifactId>maven-compiler-plugin</artifactId>
1.10 + <version>2.3.2</version>
1.11 + <configuration>
1.12 + <source>1.7</source>
1.13 + <target>1.7</target>
1.14 + </configuration>
1.15 + </plugin>
1.16 </plugins>
1.17 </build>
1.18 <dependencies>
1.19 @@ -44,12 +53,6 @@
1.20 <scope>test</scope>
1.21 </dependency>
1.22 <dependency>
1.23 - <groupId>org.webjars</groupId>
1.24 - <artifactId>envjs</artifactId>
1.25 - <version>1.2</version>
1.26 - <scope>test</scope>
1.27 - </dependency>
1.28 - <dependency>
1.29 <groupId>${project.groupId}</groupId>
1.30 <artifactId>net.java.html.json.tck</artifactId>
1.31 <version>${project.version}</version>
2.1 --- a/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java Wed Jun 04 10:27:22 2014 +0200
2.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java Wed Jun 04 10:28:17 2014 +0200
2.3 @@ -42,11 +42,14 @@
2.4 */
2.5 package net.java.html.boot.script;
2.6
2.7 +import java.io.Closeable;
2.8 +import java.io.IOException;
2.9 import java.io.Reader;
2.10 import java.net.URL;
2.11 import java.util.ArrayList;
2.12 import java.util.Arrays;
2.13 import java.util.List;
2.14 +import java.util.concurrent.Executor;
2.15 import java.util.logging.Level;
2.16 import java.util.logging.Logger;
2.17 import javax.script.Invocable;
2.18 @@ -68,7 +71,8 @@
2.19 *
2.20 * @author Jaroslav Tulach
2.21 */
2.22 -public final class ScriptPresenter implements Presenter, Fn.FromJavaScript, Fn.ToJavaScript {
2.23 +public final class ScriptPresenter
2.24 +implements Presenter, Fn.FromJavaScript, Fn.ToJavaScript, Executor {
2.25 private final ScriptEngine eng;
2.26
2.27 public ScriptPresenter() {
2.28 @@ -200,6 +204,15 @@
2.29 }
2.30 }
2.31
2.32 + @Override
2.33 + public void execute(Runnable command) {
2.34 + try (Closeable c = Fn.activate(this)) {
2.35 + command.run();
2.36 + } catch (IOException ex) {
2.37 + throw new IllegalStateException(ex);
2.38 + }
2.39 + }
2.40 +
2.41 private class FnImpl extends Fn {
2.42
2.43 private final Object fn;
3.1 --- a/boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java Wed Jun 04 10:27:22 2014 +0200
3.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java Wed Jun 04 10:28:17 2014 +0200
3.3 @@ -44,6 +44,7 @@
3.4
3.5 import java.io.BufferedReader;
3.6 import java.io.IOException;
3.7 +import java.io.InputStream;
3.8 import java.io.InputStreamReader;
3.9 import java.lang.annotation.Annotation;
3.10 import java.lang.reflect.Method;
3.11 @@ -54,21 +55,17 @@
3.12 import java.util.ArrayList;
3.13 import java.util.List;
3.14 import java.util.Map;
3.15 -import java.util.concurrent.Executor;
3.16 import java.util.concurrent.Executors;
3.17 import net.java.html.BrwsrCtx;
3.18 import net.java.html.boot.BrowserBuilder;
3.19 import net.java.html.boot.script.ScriptPresenter;
3.20 import net.java.html.js.JavaScriptBody;
3.21 -import net.java.html.js.JavaScriptResource;
3.22 import org.apidesign.html.boot.spi.Fn;
3.23 import org.apidesign.html.context.spi.Contexts;
3.24 import org.apidesign.html.json.spi.Technology;
3.25 import org.apidesign.html.json.spi.Transfer;
3.26 -import org.apidesign.html.json.spi.WSTransfer;
3.27 import org.apidesign.html.json.tck.KOTest;
3.28 import org.apidesign.html.json.tck.KnockoutTCK;
3.29 -import org.netbeans.html.boot.impl.FnContext;
3.30 import org.netbeans.html.ko4j.KO4J;
3.31 import org.openide.util.lookup.ServiceProvider;
3.32 import org.testng.Assert;
3.33 @@ -79,11 +76,11 @@
3.34 *
3.35 * @author Jaroslav Tulach <jtulach@netbeans.org>
3.36 */
3.37 -@JavaScriptResource("/META-INF/resources/webjars/envjs/1.2/env.rhino.js")
3.38 @ServiceProvider(service = KnockoutTCK.class)
3.39 public final class KnockoutEnvJSTest extends KnockoutTCK {
3.40 private static Class<?> browserClass;
3.41 private static Fn.Presenter browserContext;
3.42 + private static URI baseUri;
3.43
3.44 public KnockoutEnvJSTest() {
3.45 }
3.46 @@ -98,11 +95,16 @@
3.47 );
3.48 }
3.49
3.50 - URI uri = DynamicHTTP.initServer();
3.51 -
3.52 - final BrowserBuilder bb = BrowserBuilder.newBrowser(new ScriptPresenter()).
3.53 + baseUri = DynamicHTTP.initServer();
3.54 +
3.55 + final ScriptPresenter p = new ScriptPresenter();
3.56 + InputStream is = KnockoutEnvJSTest.class.getResourceAsStream("env.nashorn.1.2-debug.js");
3.57 + p.loadScript(new InputStreamReader(is));
3.58 + is.close();
3.59 +
3.60 + final BrowserBuilder bb = BrowserBuilder.newBrowser(p).
3.61 loadClass(KnockoutEnvJSTest.class).
3.62 - loadPage(uri.toString()).
3.63 + loadPage(baseUri.toString()).
3.64 invoke("initialized");
3.65
3.66 Executors.newSingleThreadExecutor().submit(new Runnable() {
3.67 @@ -163,7 +165,6 @@
3.68 Contexts.Builder cb = Contexts.newBuilder().
3.69 register(Technology.class, fx.knockout(), 10).
3.70 register(Transfer.class, fx.transfer(), 10);
3.71 - cb.register(Executor.class, (Executor)browserContext, 10);
3.72 cb.register(Fn.Presenter.class, browserContext, 10);
3.73 BrwsrCtx ctx = cb.build();
3.74 return ctx;
3.75 @@ -184,21 +185,15 @@
3.76 private static native void setProperty(Object json, String key, Object value);
3.77
3.78 @Override
3.79 - @JavaScriptBody(args = { "s", "args" }, body = ""
3.80 - + "var f = new Function(s); "
3.81 - + "return f.apply(null, args);"
3.82 + @JavaScriptBody(args = { "s", "args" }, body = "\n"
3.83 + + "var f = new Function(s);\n"
3.84 + + "return f.apply(null, args);\n"
3.85 )
3.86 public native Object executeScript(String script, Object[] arguments);
3.87
3.88 - @JavaScriptBody(args = { }, body =
3.89 - "var h;"
3.90 - + "if (!!window && !!window.location && !!window.location.href)\n"
3.91 - + " h = window.location.href;\n"
3.92 - + "else "
3.93 - + " h = null;"
3.94 - + "return h;\n"
3.95 - )
3.96 - private static native String findBaseURL();
3.97 + private static String findBaseURL() {
3.98 + return baseUri.toString();
3.99 + }
3.100
3.101 @Override
3.102 public URI prepareURL(String content, String mimeType, String[] parameters) {
4.1 --- a/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java Wed Jun 04 10:27:22 2014 +0200
4.2 +++ b/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java Wed Jun 04 10:28:17 2014 +0200
4.3 @@ -43,6 +43,7 @@
4.4 package org.apidesign.html.boot.spi;
4.5
4.6 import java.io.Closeable;
4.7 +import java.io.IOException;
4.8 import java.io.InputStream;
4.9 import java.io.InputStreamReader;
4.10 import java.io.Reader;
4.11 @@ -162,7 +163,14 @@
4.12 LOADED.put(resource, there);
4.13 }
4.14 if (there.add(p)) {
4.15 - InputStream is = caller.getClassLoader().getResourceAsStream(resource);
4.16 + final ClassLoader l = caller.getClassLoader();
4.17 + InputStream is = l.getResourceAsStream(resource);
4.18 + if (is == null && resource.startsWith("/")) {
4.19 + is = l.getResourceAsStream(resource.substring(1));
4.20 + }
4.21 + if (is == null) {
4.22 + throw new IOException("Cannot find " + resource + " in " + l);
4.23 + }
4.24 try {
4.25 InputStreamReader r = new InputStreamReader(is, "UTF-8");
4.26 p.loadScript(r);