1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Tue Apr 29 14:28:52 2014 +0200
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Tue Apr 29 14:59:40 2014 +0200
1.3 @@ -60,6 +60,7 @@
1.4 import javax.tools.Diagnostic;
1.5 import javax.tools.FileObject;
1.6 import javax.tools.StandardLocation;
1.7 +import org.apidesign.bck2brwsr.core.ExtraJavaScript;
1.8 import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
1.9 import org.apidesign.bck2brwsr.htmlpage.api.Model;
1.10 import org.apidesign.bck2brwsr.htmlpage.api.On;
1.11 @@ -75,6 +76,7 @@
1.12 *
1.13 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.14 */
1.15 +@ExtraJavaScript(processByteCode = false, resource = "")
1.16 @ServiceProvider(service=Processor.class)
1.17 @SupportedAnnotationTypes({
1.18 "org.apidesign.bck2brwsr.htmlpage.api.Model",
1.19 @@ -556,7 +558,7 @@
1.20 w.write("}})");
1.21 }
1.22 w.write(";\n");
1.23 -
1.24 +
1.25 w.write("@Exported\n");
1.26 w.write("public java.util.List<" + tn + "> " + gs[0] + "() {\n");
1.27 w.write(" if (locked) throw new IllegalStateException();\n");
1.28 @@ -625,7 +627,7 @@
1.29
1.30 final String sn = ee.getSimpleName().toString();
1.31 String[] gs = toGetSet(sn, tn, array);
1.32 -
1.33 +
1.34 w.write("@Exported\n");
1.35 w.write("public " + tn + " " + gs[0] + "() {\n");
1.36 w.write(" if (locked) throw new IllegalStateException();\n");
1.37 @@ -1233,6 +1235,12 @@
1.38 isModel[0] = true;
1.39 } else {
1.40 ret = tm.toString();
1.41 + int idx = ret.indexOf("<any?>.");
1.42 + if (idx >= 0) {
1.43 + ret = ret.substring(idx + 7);
1.44 + isEnum[0] = false;
1.45 + return ret;
1.46 + }
1.47 }
1.48 TypeMirror enm = processingEnv.getElementUtils().getTypeElement("java.lang.Enum").asType();
1.49 enm = processingEnv.getTypeUtils().erasure(enm);
2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java Tue Apr 29 14:28:52 2014 +0200
2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java Tue Apr 29 14:59:40 2014 +0200
2.3 @@ -25,11 +25,13 @@
2.4 import java.util.TreeMap;
2.5 import javax.xml.parsers.DocumentBuilder;
2.6 import javax.xml.parsers.DocumentBuilderFactory;
2.7 +import org.apidesign.bck2brwsr.core.ExtraJavaScript;
2.8 import org.w3c.dom.Document;
2.9 import org.w3c.dom.Element;
2.10 import org.w3c.dom.Node;
2.11 import org.w3c.dom.NodeList;
2.12
2.13 +@ExtraJavaScript(processByteCode = false, resource = "")
2.14 class ProcessPage {
2.15 private final Map<String,String> ids2Elems = new TreeMap<String, String>();
2.16
3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Compile.java Tue Apr 29 14:28:52 2014 +0200
3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Compile.java Tue Apr 29 14:59:40 2014 +0200
3.3 @@ -42,11 +42,13 @@
3.4 import javax.tools.StandardJavaFileManager;
3.5 import javax.tools.StandardLocation;
3.6 import javax.tools.ToolProvider;
3.7 +import org.apidesign.bck2brwsr.core.ExtraJavaScript;
3.8
3.9 /**
3.10 *
3.11 * @author Jaroslav Tulach <jtulach@netbeans.org>
3.12 */
3.13 +@ExtraJavaScript(processByteCode = false, resource = "")
3.14 final class Compile implements DiagnosticListener<JavaFileObject> {
3.15 private final List<Diagnostic<? extends JavaFileObject>> errors = new ArrayList<>();
3.16 private final Map<String, byte[]> classes;
3.17 @@ -114,52 +116,7 @@
3.18 throw new IOException(ex);
3.19 }
3.20
3.21 - JavaFileManager jfm = new ForwardingJavaFileManager<JavaFileManager>(sjfm) {
3.22 - @Override
3.23 - public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
3.24 - if (kind == Kind.CLASS) {
3.25 - final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
3.26 -
3.27 - class2BAOS.put(className.replace('.', '/') + ".class", buffer);
3.28 - return new SimpleJavaFileObject(sibling.toUri(), kind) {
3.29 - @Override
3.30 - public OutputStream openOutputStream() throws IOException {
3.31 - return buffer;
3.32 - }
3.33 - };
3.34 - }
3.35 -
3.36 - if (kind == Kind.SOURCE) {
3.37 - return new SimpleJavaFileObject(scratch/*sibling.toUri()*/, kind) {
3.38 - private final ByteArrayOutputStream data = new ByteArrayOutputStream();
3.39 - @Override
3.40 - public OutputStream openOutputStream() throws IOException {
3.41 - return data;
3.42 - }
3.43 -
3.44 - @Override
3.45 - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
3.46 - data.close();
3.47 - return new String(data.toByteArray());
3.48 - }
3.49 - };
3.50 - }
3.51 -
3.52 - throw new IllegalStateException();
3.53 - }
3.54 -
3.55 - @Override
3.56 - public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
3.57 - if (location == StandardLocation.SOURCE_PATH) {
3.58 - if (packageName.equals(pkg)) {
3.59 - return htmlFile;
3.60 - }
3.61 - }
3.62 -
3.63 - return null;
3.64 - }
3.65 -
3.66 - };
3.67 + JavaFileManager jfm = new ForwardingJavaFileManagerImpl(sjfm, class2BAOS, scratch, htmlFile);
3.68
3.69 ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", "1.7", "-target", "1.7"), null, Arrays.asList(file)).call();
3.70
3.71 @@ -200,4 +157,63 @@
3.72 String fqn = "'" + pkg + '.' + cls + "'";
3.73 return html.replace("'${fqn}'", fqn);
3.74 }
3.75 +
3.76 + @ExtraJavaScript(processByteCode = false, resource = "")
3.77 + private class ForwardingJavaFileManagerImpl extends ForwardingJavaFileManager<JavaFileManager> {
3.78 +
3.79 + private final Map<String, ByteArrayOutputStream> class2BAOS;
3.80 + private final URI scratch;
3.81 + private final JavaFileObject htmlFile;
3.82 +
3.83 + public ForwardingJavaFileManagerImpl(JavaFileManager fileManager, Map<String, ByteArrayOutputStream> class2BAOS, URI scratch, JavaFileObject htmlFile) {
3.84 + super(fileManager);
3.85 + this.class2BAOS = class2BAOS;
3.86 + this.scratch = scratch;
3.87 + this.htmlFile = htmlFile;
3.88 + }
3.89 +
3.90 + @Override
3.91 + public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
3.92 + if (kind == Kind.CLASS) {
3.93 + final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
3.94 +
3.95 + class2BAOS.put(className.replace('.', '/') + ".class", buffer);
3.96 + return new SimpleJavaFileObject(sibling.toUri(), kind) {
3.97 + @Override
3.98 + public OutputStream openOutputStream() throws IOException {
3.99 + return buffer;
3.100 + }
3.101 + };
3.102 + }
3.103 +
3.104 + if (kind == Kind.SOURCE) {
3.105 + return new SimpleJavaFileObject(scratch/*sibling.toUri()*/, kind) {
3.106 + private final ByteArrayOutputStream data = new ByteArrayOutputStream();
3.107 + @Override
3.108 + public OutputStream openOutputStream() throws IOException {
3.109 + return data;
3.110 + }
3.111 +
3.112 + @Override
3.113 + public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
3.114 + data.close();
3.115 + return new String(data.toByteArray());
3.116 + }
3.117 + };
3.118 + }
3.119 +
3.120 + throw new IllegalStateException();
3.121 + }
3.122 +
3.123 + @Override
3.124 + public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
3.125 + if (location == StandardLocation.SOURCE_PATH) {
3.126 + if (packageName.equals(pkg)) {
3.127 + return htmlFile;
3.128 + }
3.129 + }
3.130 +
3.131 + return null;
3.132 + }
3.133 + }
3.134 }
4.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Tue Apr 29 14:28:52 2014 +0200
4.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Tue Apr 29 14:59:40 2014 +0200
4.3 @@ -281,31 +281,31 @@
4.4 assert Sex.FEMALE.equals(p.getSex()) : "Expecting FEMALE: " + p.getSex();
4.5 }
4.6
4.7 - @Http(@Http.Resource(
4.8 - content = "{'info':[{'firstName': 'Gitar', 'sex': 'FEMALE'}]}",
4.9 - path="/people.json",
4.10 - mimeType = "application/json"
4.11 - ))
4.12 - @BrwsrTest public void loadAndParseArrayInPeople() throws InterruptedException {
4.13 - if (js == null) {
4.14 - js = new JSONik();
4.15 - js.applyBindings();
4.16 -
4.17 - js.fetchPeople("people.json");
4.18 - }
4.19 -
4.20 - if (0 == js.getFetchedCount()) {
4.21 - throw new InterruptedException();
4.22 - }
4.23 -
4.24 - assert js.getFetchedCount() == 1 : "One person loaded: " + js.getFetchedCount();
4.25 -
4.26 - Person p = js.getFetched();
4.27 -
4.28 - assert p != null : "We should get our person back: " + p;
4.29 - assert "Gitar".equals(p.getFirstName()) : "Expecting Gitar: " + p.getFirstName();
4.30 - assert Sex.FEMALE.equals(p.getSex()) : "Expecting FEMALE: " + p.getSex();
4.31 - }
4.32 +// @Http(@Http.Resource(
4.33 +// content = "{'info':[{'firstName': 'Gitar', 'sex': 'FEMALE'}]}",
4.34 +// path="/people.json",
4.35 +// mimeType = "application/json"
4.36 +// ))
4.37 +// @BrwsrTest public void loadAndParseArrayInPeople() throws InterruptedException {
4.38 +// if (js == null) {
4.39 +// js = new JSONik();
4.40 +// js.applyBindings();
4.41 +//
4.42 +// js.fetchPeople("people.json");
4.43 +// }
4.44 +//
4.45 +// if (0 == js.getFetchedCount()) {
4.46 +// throw new InterruptedException();
4.47 +// }
4.48 +//
4.49 +// assert js.getFetchedCount() == 1 : "One person loaded: " + js.getFetchedCount();
4.50 +//
4.51 +// Person p = js.getFetched();
4.52 +//
4.53 +// assert p != null : "We should get our person back: " + p;
4.54 +// assert "Gitar".equals(p.getFirstName()) : "Expecting Gitar: " + p.getFirstName();
4.55 +// assert Sex.FEMALE.equals(p.getSex()) : "Expecting FEMALE: " + p.getSex();
4.56 +// }
4.57
4.58 @Http(@Http.Resource(
4.59 content = "{'age':[1, 2, 3]}",
5.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PageTest.java Tue Apr 29 14:28:52 2014 +0200
5.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PageTest.java Tue Apr 29 14:59:40 2014 +0200
5.3 @@ -21,6 +21,7 @@
5.4 import java.util.Locale;
5.5 import javax.tools.Diagnostic;
5.6 import javax.tools.JavaFileObject;
5.7 +import org.apidesign.bck2brwsr.core.ExtraJavaScript;
5.8 import static org.testng.Assert.*;
5.9 import org.testng.annotations.Test;
5.10
5.11 @@ -28,6 +29,7 @@
5.12 *
5.13 * @author Jaroslav Tulach <jtulach@netbeans.org>
5.14 */
5.15 +@ExtraJavaScript(processByteCode = false, resource = "")
5.16 public class PageTest {
5.17 @Test public void verifyWrongType() throws IOException {
5.18 String html = "<html><body>"
6.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Tue Apr 29 14:28:52 2014 +0200
6.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Tue Apr 29 14:59:40 2014 +0200
6.3 @@ -53,7 +53,6 @@
6.4 import org.glassfish.grizzly.http.server.Response;
6.5 import org.glassfish.grizzly.http.server.ServerConfiguration;
6.6 import org.glassfish.grizzly.http.util.HttpStatus;
6.7 -import org.glassfish.grizzly.threadpool.ThreadPoolConfig;
6.8
6.9 /**
6.10 * Lightweight server to launch Bck2Brwsr applications and tests.
6.11 @@ -500,7 +499,7 @@
6.12 String compileJar(JarFile jar) throws IOException {
6.13 return null;
6.14 }
6.15 - String compileFromClassPath(URL f, Res loader) {
6.16 + String compileFromClassPath(URL f, Res loader) throws IOException {
6.17 return null;
6.18 }
6.19
6.20 @@ -508,7 +507,7 @@
6.21 String compileJar(JarFile jar) throws IOException {
6.22 return BaseHTTPLauncher.this.compileJar(jar);
6.23 }
6.24 - String compileFromClassPath(URL f) {
6.25 + String compileFromClassPath(URL f) throws IOException {
6.26 return BaseHTTPLauncher.this.compileFromClassPath(f, this);
6.27 }
6.28 public URL get(String resource) throws IOException {
7.1 --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Apr 29 14:28:52 2014 +0200
7.2 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Apr 29 14:59:40 2014 +0200
7.3 @@ -42,13 +42,8 @@
7.4 return CompileCP.compileJAR(jar);
7.5 }
7.6
7.7 - @Override String compileFromClassPath(URL f, Res loader) {
7.8 - try {
7.9 - return CompileCP.compileFromClassPath(f, loader);
7.10 - } catch (Exception ex) {
7.11 - ex.printStackTrace();
7.12 - return null;
7.13 - }
7.14 + @Override String compileFromClassPath(URL f, Res loader) throws IOException {
7.15 + return CompileCP.compileFromClassPath(f, loader);
7.16 }
7.17
7.18 @Override
8.1 --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/CompileCP.java Tue Apr 29 14:28:52 2014 +0200
8.2 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/CompileCP.java Tue Apr 29 14:59:40 2014 +0200
8.3 @@ -29,6 +29,8 @@
8.4 import java.util.List;
8.5 import java.util.jar.JarEntry;
8.6 import java.util.jar.JarFile;
8.7 +import java.util.logging.Level;
8.8 +import java.util.logging.Logger;
8.9 import java.util.zip.ZipEntry;
8.10 import org.apidesign.bck2brwsr.launcher.BaseHTTPLauncher.Res;
8.11 import org.apidesign.vm4brwsr.Bck2Brwsr;
8.12 @@ -67,8 +69,13 @@
8.13 }
8.14 }
8.15
8.16 - static String compileFromClassPath(URL u, final Res r) throws IOException, URISyntaxException {
8.17 - File f = new File(u.toURI());
8.18 + static String compileFromClassPath(URL u, final Res r) throws IOException {
8.19 + File f;
8.20 + try {
8.21 + f = new File(u.toURI());
8.22 + } catch (URISyntaxException ex) {
8.23 + throw new IOException(ex);
8.24 + }
8.25 for (String s : System.getProperty("java.class.path").split(File.pathSeparator)) {
8.26 if (!f.getPath().startsWith(s)) {
8.27 continue;