# HG changeset patch # User Jaroslav Tulach # Date 1367236576 -7200 # Node ID 0d7b63408a1e36f047e7ba0f865f680047583c05 # Parent fef28d5bee88be436f1864492eca8e4d30b78ecb Bck2Brwsr project is completely independent of net.java.html diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/api/pom.xml --- a/javaquery/api/pom.xml Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/api/pom.xml Mon Apr 29 13:56:16 2013 +0200 @@ -78,17 +78,6 @@ launcher.http ${project.version} test - - - org.apidesign.html - net.java.html.json - 0.1-SNAPSHOT - - - org.apidesign.html - net.java.html.json.tck - 0.1-SNAPSHOT - test - + diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java Mon Apr 29 10:04:53 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/** - * Back 2 Browser Bytecode Translator - * Copyright (C) 2012 Jaroslav Tulach - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. Look for COPYING file in the top folder. - * If not, see http://opensource.org/licenses/GPL-2.0. - */ - -package org.apidesign.bck2brwsr.htmlpage; - -import net.java.html.json.Context; -import org.apidesign.html.json.spi.ContextBuilder; -import org.apidesign.html.json.spi.FunctionBinding; -import org.apidesign.html.json.spi.JSONCall; -import org.apidesign.html.json.spi.PropertyBinding; -import org.apidesign.html.json.spi.Technology; -import org.apidesign.html.json.spi.Transfer; - -/** - * - * @author Jaroslav Tulach - */ -public final class BrwsrCntxt implements Technology, Transfer { - private BrwsrCntxt() {} - - public static final Context DEFAULT; - static { - BrwsrCntxt c = new BrwsrCntxt(); - DEFAULT = ContextBuilder.create().withTechnology(c).withTransfer(c).build(); - } - - @Override - public void extract(Object obj, String[] props, Object[] values) { - ConvertTypes.extractJSON(obj, props, values); - } - - @Override - public void loadJSON(final JSONCall call) { - class R implements Runnable { - Object[] arr = { null }; - @Override - public void run() { - call.notifySuccess(arr[0]); - } - } - R r = new R(); - if (call.isJSONP()) { - String me = ConvertTypes.createJSONP(r.arr, r); - ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me); - } else { - ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null); - } - } - - @Override - public Object wrapModel(Object model) { - return model; - } - - @Override - public void bind(PropertyBinding b, Object model, Object data) { - Knockout.bind(data, b, b.getPropertyName(), - "getValue__Ljava_lang_Object_2", - b.isReadOnly() ? null : "setValue__VLjava_lang_Object_2", - false, false - ); - } - - @Override - public void valueHasMutated(Object data, String propertyName) { - Knockout.valueHasMutated(data, propertyName); - } - - @Override - public void expose(FunctionBinding fb, Object model, Object d) { - Knockout.expose(d, fb, fb.getFunctionName(), "call__VLjava_lang_Object_2Ljava_lang_Object_2"); - } - - @Override - public void applyBindings(Object data) { - Knockout.applyBindings(data); - } - - @Override - public Object wrapArray(Object[] arr) { - return arr; - } - - @Override - public M toModel(Class modelClass, Object data) { - return modelClass.cast(data); - } -} diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxtPrvdr.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxtPrvdr.java Mon Apr 29 10:04:53 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/** - * Back 2 Browser Bytecode Translator - * Copyright (C) 2012 Jaroslav Tulach - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. Look for COPYING file in the top folder. - * If not, see http://opensource.org/licenses/GPL-2.0. - */ -package org.apidesign.bck2brwsr.htmlpage; - -import net.java.html.json.Context; -import org.apidesign.bck2brwsr.core.JavaScriptBody; -import org.apidesign.html.json.spi.ContextProvider; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Jaroslav Tulach - */ -@ServiceProvider(service = ContextProvider.class) -public final class BrwsrCntxtPrvdr implements ContextProvider { - @Override - public Context findContext(Class requestor) { - return bck2BrwsrVM() ? BrwsrCntxt.DEFAULT : null; - } - - @JavaScriptBody(args = { }, body = "return true;") - private static boolean bck2BrwsrVM() { - return false; - } -} diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Apr 29 13:56:16 2013 +0200 @@ -61,9 +61,9 @@ valueHasMutated(model, prop); } @JavaScriptBody(args = { "self", "prop" }, body = - "var p = self[prop]; if (p) p.valueHasMutated();" + "self[prop].valueHasMutated();" ) - public static void valueHasMutated(Object self, String prop) { + public void valueHasMutated(Object self, String prop) { } @@ -87,7 +87,7 @@ + "}\n" + "bindings[prop] = ko['computed'](bnd);" ) - static void bind( + private static void bind( Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array ) { } @@ -95,13 +95,13 @@ @JavaScriptBody(args = { "bindings", "model", "prop", "sig" }, body = "bindings[prop] = function(data, ev) { model[sig](data, ev); };" ) - static void expose( + private static void expose( Object bindings, Object model, String prop, String sig ) { } @JavaScriptBody(args = { "bindings" }, body = "ko.applyBindings(bindings);") - static void applyBindings(Object bindings) {} + private static void applyBindings(Object bindings) {} private static void applyImpl( String[] propsGettersAndSetters, diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java Mon Apr 29 10:04:53 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/** - * Back 2 Browser Bytecode Translator - * Copyright (C) 2012 Jaroslav Tulach - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. Look for COPYING file in the top folder. - * If not, see http://opensource.org/licenses/GPL-2.0. - */ -package org.apidesign.bck2brwsr.htmlpage; - -import java.util.Map; -import net.java.html.json.Context; -import org.apidesign.bck2brwsr.core.JavaScriptBody; -import org.apidesign.bck2brwsr.vmtest.VMTest; -import org.apidesign.html.json.tck.KnockoutTCK; -import org.openide.util.lookup.ServiceProvider; -import org.testng.annotations.Factory; - -/** - * - * @author Jaroslav Tulach - */ -@ServiceProvider(service = KnockoutTCK.class) -public final class Bck2BrwsrKnockoutTest extends KnockoutTCK { - @Factory public static Object[] create() { - return VMTest.newTests(). - withClasses(testClasses()). - withLaunchers("bck2brwsr"). - build(); - } - - @Override - public Context createContext() { - return BrwsrCntxt.DEFAULT; - } - - - - @Override - public Object createJSON(Map values) { - Object json = createJSON(); - - for (Map.Entry entry : values.entrySet()) { - putValue(json, entry.getKey(), entry.getValue()); - } - return json; - } - - @JavaScriptBody(args = {}, body = "return new Object();") - private static native Object createJSON(); - - @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;") - private static native void putValue(Object json, String key, Object value); - - @Override - public Object executeScript(String script, Object[] arguments) { - return execScript(script, arguments); - } - - @JavaScriptBody(args = { "s", "args" }, body = - "var f = new Function(s); return f.apply(null, args);" - ) - private static native Object execScript(String s, Object[] arguments); -} diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/bck2brwsr-assembly.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaquery/demo-twitter/bck2brwsr-assembly.xml Mon Apr 29 13:56:16 2013 +0200 @@ -0,0 +1,62 @@ + + + + + bck2brwsr + + zip + + public_html + + + false + runtime + lib + + *:jar + *:rt + + + + + + ${project.build.directory}/classes/org/apidesign/bck2brwsr/demo/twitter/ + + **/* + + + **/*.class + + / + + + + + ${project.build.directory}/${project.build.finalName}.jar + / + + + ${project.build.directory}/bck2brwsr.js + / + + + \ No newline at end of file diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/pom.xml --- a/javaquery/demo-twitter/pom.xml Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/demo-twitter/pom.xml Mon Apr 29 13:56:16 2013 +0200 @@ -12,10 +12,10 @@ 0.7-SNAPSHOT jar - Fx/Bck2Brwsr's Twttr + Bck2Brwsr's Twttr Rewrite of knockoutjs example to use model written in Java and - execute using FxBrwsr or Bck2Brwsr. + execute using Bck2Brwsr virtual machine. @@ -45,71 +45,91 @@ UTF-8 MINIMAL - org/apidesign/bck2brwsr/demo/twitter/index.html - - org.apidesign.bck2brwsr - bck2brwsr-maven-plugin - ${project.version} - - - - brwsr - - - - - ${brwsr.startpage} - ${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 - - + + 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 + emul + ${project.version} + rt + + + org.apidesign.bck2brwsr + javaquery.api + ${project.version} + + org.testng testng 6.5.2 @@ -121,149 +141,5 @@ ${project.version} test - - org.apidesign.html - net.java.html.json - 0.1-SNAPSHOT - jar - - - - fxbrwsr - - true - - - fxbrwsr - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - org.apidesign.bck2brwsr.launcher.FXBrwsrLauncher - true - lib/ - - - ${brwsr.startpage} - - - - - - maven-assembly-plugin - 2.4 - - - distro-assembly - package - - single - - - - src/main/assembly/fxbrwsr.xml - - - - - - - - - - org.apidesign.html - ko-fx - 0.1-SNAPSHOT - - - ${project.groupId} - launcher.fx - ${project.version} - runtime - - - - - 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 - - - - - maven-assembly-plugin - 2.4 - - - distro-assembly - package - - single - - - - src/main/assembly/bck2brwsr.xml - - - - - - - - - - org.apidesign.bck2brwsr - emul - ${project.version} - rt - - - org.apidesign.bck2brwsr - javaquery.api - ${project.version} - runtime - - - ${project.groupId} - launcher.http - ${project.version} - test - - - - diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/src/main/assembly/bck2brwsr.xml --- a/javaquery/demo-twitter/src/main/assembly/bck2brwsr.xml Mon Apr 29 10:04:53 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ - - - - - bck2brwsr - - zip - - public_html - - - false - runtime - lib - - *:jar - *:rt - - - - - - ${project.build.directory}/classes/org/apidesign/bck2brwsr/demo/twitter/ - - **/* - - - **/*.class - - / - - - - - ${project.build.directory}/${project.build.finalName}.jar - / - - - ${project.build.directory}/bck2brwsr.js - / - - - \ No newline at end of file diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/src/main/assembly/fxbrwsr.xml --- a/javaquery/demo-twitter/src/main/assembly/fxbrwsr.xml Mon Apr 29 10:04:53 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ - - - - - fxbrwsr - - zip - - ${project.build.finalName}-fxbrwsr - - - false - runtime - lib - - - - - ${project.build.directory}/${project.build.finalName}.jar - / - - - \ No newline at end of file diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java --- a/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/demo-twitter/src/main/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClient.java Mon Apr 29 13:56:16 2013 +0200 @@ -19,19 +19,16 @@ import java.util.Arrays; import java.util.List; -import net.java.html.json.ComputedProperty; -import net.java.html.json.Context; -import net.java.html.json.Function; -import net.java.html.json.Model; -import net.java.html.json.OnPropertyChange; -import net.java.html.json.OnReceive; -import net.java.html.json.Property; +import org.apidesign.bck2brwsr.htmlpage.api.*; +import org.apidesign.bck2brwsr.htmlpage.api.Page; +import org.apidesign.bck2brwsr.htmlpage.api.Property; +import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty; /** Controller class for access to Twitter. * * @author Jaroslav Tulach */ -@Model(className="TwitterModel", properties={ +@Page(xhtml="index.html", className="TwitterModel", properties={ @Property(name="savedLists", type=Tweeters.class, array = true), @Property(name="activeTweetersName", type=String.class), @Property(name="activeTweeters", type=String.class, array = true), @@ -109,9 +106,8 @@ model.queryTweets("http://search.twitter.com", sb.toString()); } - private static final Context DEFAULT = Context.findDefault(TwitterClient.class); static { - final TwitterModel model = new TwitterModel(DEFAULT); + final TwitterModel model = new TwitterModel(); final List svdLst = model.getSavedLists(); svdLst.add(newTweeters("API Design", "JaroslavTulach")); svdLst.add(newTweeters("Celebrities", "JohnCleese", "MCHammer", "StephenFry", "algore", "StevenSanderson")); @@ -147,19 +143,19 @@ !activeTweeters.contains(userNameToAdd); } - @Function + @OnFunction static void deleteList(TwitterModel model) { final List sl = model.getSavedLists(); sl.remove(findByName(sl, model.getActiveTweetersName())); if (sl.isEmpty()) { - final Tweeters t = new Tweeters(DEFAULT); + final Tweeters t = new Tweeters(); t.setName("New"); sl.add(t); } model.setActiveTweetersName(sl.get(0).getName()); } - @Function + @OnFunction static void saveChanges(TwitterModel model) { Tweeters t = findByName(model.getSavedLists(), model.getActiveTweetersName()); int indx = model.getSavedLists().indexOf(t); @@ -170,12 +166,12 @@ } } - @Function + @OnFunction static void addUser(TwitterModel model) { String n = model.getUserNameToAdd(); model.getActiveTweeters().add(n); } - @Function + @OnFunction static void removeUser(String data, TwitterModel model) { model.getActiveTweeters().remove(data); } @@ -186,11 +182,11 @@ return l; } } - return list.isEmpty() ? new Tweeters(DEFAULT) : list.get(0); + return list.isEmpty() ? new Tweeters() : list.get(0); } private static Tweeters newTweeters(String listName, String... userNames) { - Tweeters t = new Tweeters(DEFAULT); + Tweeters t = new Tweeters(); t.setName(listName); t.getUserNames().addAll(Arrays.asList(userNames)); return t; diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClientTest.java --- a/javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClientTest.java Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterClientTest.java Mon Apr 29 13:56:16 2013 +0200 @@ -18,7 +18,6 @@ package org.apidesign.bck2brwsr.demo.twitter; import java.util.List; -import net.java.html.json.Context; import static org.testng.Assert.*; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -33,12 +32,12 @@ @BeforeMethod public void initModel() { - model = new TwitterModel(Context.EMPTY); + model = new TwitterModel().applyBindings(); } @Test public void testIsValidToAdd() { model.setUserNameToAdd("Joe"); - Tweeters t = new Tweeters(Context.EMPTY); + Tweeters t = new Tweeters(); t.setName("test"); model.getSavedLists().add(t); model.setActiveTweetersName("test"); diff -r fef28d5bee88 -r 0d7b63408a1e javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterProtocolTest.java --- a/javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterProtocolTest.java Mon Apr 29 10:04:53 2013 +0200 +++ b/javaquery/demo-twitter/src/test/java/org/apidesign/bck2brwsr/demo/twitter/TwitterProtocolTest.java Mon Apr 29 13:56:16 2013 +0200 @@ -17,7 +17,6 @@ */ package org.apidesign.bck2brwsr.demo.twitter; -import net.java.html.json.Context; import org.apidesign.bck2brwsr.vmtest.BrwsrTest; import org.apidesign.bck2brwsr.vmtest.Http; import org.apidesign.bck2brwsr.vmtest.VMTest; @@ -74,7 +73,7 @@ )) @BrwsrTest public void readFromTwttr() throws InterruptedException { if (page == null) { - page = new TwitterModel(Context.findDefault(TwitterProtocolTest.class)); + page = new TwitterModel(); page.applyBindings(); page.queryTweets("", "q=xyz"); }