javaquery.api is now implementation of net.java.html.json API model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 24 Apr 2013 20:22:19 +0200
branchmodel
changeset 101849eb825c87b7
parent 1017 be21afc3d48a
child 1019 814e4be6a104
javaquery.api is now implementation of net.java.html.json API
javaquery/api/pom.xml
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java
rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java
rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java
     1.1 --- a/javaquery/api/pom.xml	Fri Apr 19 09:49:26 2013 +0200
     1.2 +++ b/javaquery/api/pom.xml	Wed Apr 24 20:22:19 2013 +0200
     1.3 @@ -73,5 +73,16 @@
     1.4        <version>${project.version}</version>
     1.5        <scope>test</scope>
     1.6      </dependency>
     1.7 +    <dependency>
     1.8 +      <groupId>org.apidesign.html</groupId>
     1.9 +      <artifactId>net.java.html.json</artifactId>
    1.10 +      <version>0.1-SNAPSHOT</version>
    1.11 +    </dependency>
    1.12 +    <dependency>
    1.13 +      <groupId>org.apidesign.html</groupId>
    1.14 +      <artifactId>net.java.html.json.tck</artifactId>
    1.15 +      <version>0.1-SNAPSHOT</version>
    1.16 +      <scope>test</scope>
    1.17 +    </dependency>
    1.18    </dependencies>
    1.19  </project>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java	Wed Apr 24 20:22:19 2013 +0200
     2.3 @@ -0,0 +1,99 @@
     2.4 +/**
     2.5 + * Back 2 Browser Bytecode Translator
     2.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     2.7 + *
     2.8 + * This program is free software: you can redistribute it and/or modify
     2.9 + * it under the terms of the GNU General Public License as published by
    2.10 + * the Free Software Foundation, version 2 of the License.
    2.11 + *
    2.12 + * This program is distributed in the hope that it will be useful,
    2.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.15 + * GNU General Public License for more details.
    2.16 + *
    2.17 + * You should have received a copy of the GNU General Public License
    2.18 + * along with this program. Look for COPYING file in the top folder.
    2.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    2.20 + */
    2.21 +
    2.22 +package org.apidesign.bck2brwsr.htmlpage;
    2.23 +
    2.24 +import net.java.html.json.Context;
    2.25 +import org.apidesign.html.json.spi.ContextBuilder;
    2.26 +import org.apidesign.html.json.spi.FunctionBinding;
    2.27 +import org.apidesign.html.json.spi.JSONCall;
    2.28 +import org.apidesign.html.json.spi.PropertyBinding;
    2.29 +import org.apidesign.html.json.spi.Technology;
    2.30 +import org.apidesign.html.json.spi.Transfer;
    2.31 +
    2.32 +/**
    2.33 + *
    2.34 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    2.35 + */
    2.36 +public final class BrwsrCntxt implements Technology<Object>, Transfer {
    2.37 +    private BrwsrCntxt() {}
    2.38 +    
    2.39 +    public static final Context DEFAULT;
    2.40 +    static {
    2.41 +        BrwsrCntxt c = new BrwsrCntxt();
    2.42 +        DEFAULT = ContextBuilder.create().withTechnology(c).withTransfer(c).build();
    2.43 +    }
    2.44 +    
    2.45 +    @Override
    2.46 +    public void extract(Object obj, String[] props, Object[] values) {
    2.47 +        ConvertTypes.extractJSON(obj, props, values);
    2.48 +    }
    2.49 +
    2.50 +    @Override
    2.51 +    public void loadJSON(final JSONCall call) {
    2.52 +        class R implements Runnable {
    2.53 +            Object[] arr = { null };
    2.54 +            @Override
    2.55 +            public void run() {
    2.56 +                call.notifySuccess(arr[0]);
    2.57 +            }
    2.58 +        }
    2.59 +        R r = new R();
    2.60 +        if (call.isJSONP()) {
    2.61 +            String me = ConvertTypes.createJSONP(r.arr, r);
    2.62 +            ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me);
    2.63 +        } else {
    2.64 +            ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null);
    2.65 +        }
    2.66 +    }
    2.67 +
    2.68 +    @Override
    2.69 +    public Object wrapModel(Object model) {
    2.70 +        return model;
    2.71 +    }
    2.72 +
    2.73 +    @Override
    2.74 +    public void bind(PropertyBinding b, Object model, Object data) {
    2.75 +        Knockout.bind(data, b, b.getPropertyName(), 
    2.76 +            "getValue__Ljava_lang_Object_2", 
    2.77 +            b.isReadOnly() ? null : "setValue__VLjava_lang_Object_2", 
    2.78 +            false, false
    2.79 +        );
    2.80 +    }
    2.81 +
    2.82 +    @Override
    2.83 +    public void valueHasMutated(Object data, String propertyName) {
    2.84 +        Knockout.valueHasMutated(data, propertyName);
    2.85 +    }
    2.86 +
    2.87 +    @Override
    2.88 +    public void expose(FunctionBinding fb, Object model, Object d) {
    2.89 +        Knockout.expose(d, fb, fb.getFunctionName(), "call__VLjava_lang_Object_2Ljava_lang_Object_2");
    2.90 +    }
    2.91 +
    2.92 +    @Override
    2.93 +    public void applyBindings(Object data) {
    2.94 +        Knockout.applyBindings(data);
    2.95 +    }
    2.96 +
    2.97 +    @Override
    2.98 +    public Object wrapArray(Object[] arr) {
    2.99 +        return arr;
   2.100 +    }
   2.101 +    
   2.102 +}
     3.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Fri Apr 19 09:49:26 2013 +0200
     3.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Wed Apr 24 20:22:19 2013 +0200
     3.3 @@ -61,9 +61,9 @@
     3.4          valueHasMutated(model, prop);
     3.5      }
     3.6      @JavaScriptBody(args = { "self", "prop" }, body =
     3.7 -        "self[prop].valueHasMutated();"
     3.8 +        "var p = self[prop]; if (p) p.valueHasMutated();"
     3.9      )
    3.10 -    public void valueHasMutated(Object self, String prop) {
    3.11 +    public static void valueHasMutated(Object self, String prop) {
    3.12      }
    3.13      
    3.14  
    3.15 @@ -87,7 +87,7 @@
    3.16          + "}\n"
    3.17          + "bindings[prop] = ko['computed'](bnd);"
    3.18      )
    3.19 -    private static void bind(
    3.20 +    static void bind(
    3.21          Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array
    3.22      ) {
    3.23      }
    3.24 @@ -95,13 +95,13 @@
    3.25      @JavaScriptBody(args = { "bindings", "model", "prop", "sig" }, body = 
    3.26          "bindings[prop] = function(data, ev) { model[sig](data, ev); };"
    3.27      )
    3.28 -    private static void expose(
    3.29 +    static void expose(
    3.30          Object bindings, Object model, String prop, String sig
    3.31      ) {
    3.32      }
    3.33      
    3.34      @JavaScriptBody(args = { "bindings" }, body = "ko.applyBindings(bindings);")
    3.35 -    private static void applyBindings(Object bindings) {}
    3.36 +    static void applyBindings(Object bindings) {}
    3.37      
    3.38      private static void applyImpl(
    3.39          String[] propsGettersAndSetters,
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java	Wed Apr 24 20:22:19 2013 +0200
     4.3 @@ -0,0 +1,60 @@
     4.4 +/**
     4.5 + * Back 2 Browser Bytecode Translator
     4.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4.7 + *
     4.8 + * This program is free software: you can redistribute it and/or modify
     4.9 + * it under the terms of the GNU General Public License as published by
    4.10 + * the Free Software Foundation, version 2 of the License.
    4.11 + *
    4.12 + * This program is distributed in the hope that it will be useful,
    4.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    4.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    4.15 + * GNU General Public License for more details.
    4.16 + *
    4.17 + * You should have received a copy of the GNU General Public License
    4.18 + * along with this program. Look for COPYING file in the top folder.
    4.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    4.20 + */
    4.21 +package org.apidesign.bck2brwsr.htmlpage;
    4.22 +
    4.23 +import java.util.Map;
    4.24 +import net.java.html.json.Context;
    4.25 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    4.26 +import org.apidesign.bck2brwsr.vmtest.VMTest;
    4.27 +import org.apidesign.html.json.tck.KnockoutTCK;
    4.28 +import org.openide.util.lookup.ServiceProvider;
    4.29 +import org.testng.annotations.Factory;
    4.30 +
    4.31 +/**
    4.32 + *
    4.33 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    4.34 + */
    4.35 +@ServiceProvider(service = KnockoutTCK.class)
    4.36 +public final class Bck2BrwsrKnockoutTest extends KnockoutTCK {
    4.37 +    @Factory public static Object[] create() {
    4.38 +        return VMTest.create(testClasses());
    4.39 +    }
    4.40 +    
    4.41 +    @Override
    4.42 +    public Context createContext() {
    4.43 +        return BrwsrCntxt.DEFAULT;
    4.44 +    }
    4.45 +
    4.46 +
    4.47 +    
    4.48 +    @Override
    4.49 +    public Object createJSON(Map<String, Object> values) {
    4.50 +        Object json = createJSON();
    4.51 +        
    4.52 +        for (Map.Entry<String, Object> entry : values.entrySet()) {
    4.53 +            putValue(json, entry.getKey(), entry.getValue());
    4.54 +        }
    4.55 +        return json;
    4.56 +    }
    4.57 +
    4.58 +    @JavaScriptBody(args = {}, body = "return new Object();")
    4.59 +    private static native Object createJSON();
    4.60 +
    4.61 +    @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;")
    4.62 +    private static native void putValue(Object json, String key, Object value);
    4.63 +}
     5.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java	Fri Apr 19 09:49:26 2013 +0200
     5.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java	Wed Apr 24 20:22:19 2013 +0200
     5.3 @@ -47,10 +47,10 @@
     5.4       * Each {@link BrwsrTest} annotated method is executed once in {@link Launcher started
     5.5       * browser}.
     5.6       * 
     5.7 -     * @param clazz the class to inspect
     5.8 +     * @param clazz the class (or classes) to inspect
     5.9       * @return the set of created tests
    5.10       */
    5.11 -    public static Object[] create(Class<?> clazz) {
    5.12 +    public static Object[] create(Class... clazz) {
    5.13          return CompareCase.create(clazz);
    5.14      }
    5.15  }
     6.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java	Fri Apr 19 09:49:26 2013 +0200
     6.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java	Wed Apr 24 20:22:19 2013 +0200
     6.3 @@ -53,8 +53,7 @@
     6.4       * @param clazz the class to inspect
     6.5       * @return the set of created tests
     6.6       */
     6.7 -    public static Object[] create(Class<?> clazz) {
     6.8 -        Method[] arr = clazz.getMethods();
     6.9 +    public static Object[] create(Class... classes) {
    6.10          List<Object> ret = new ArrayList<>();
    6.11          
    6.12          final LaunchSetup l = LaunchSetup.INSTANCE;
    6.13 @@ -70,9 +69,12 @@
    6.14              }
    6.15          }
    6.16          
    6.17 -        for (Method m : arr) {
    6.18 -            registerCompareCases(m, l, ret, brwsr);
    6.19 -            registerBrwsrCases(m, l, ret, brwsr);
    6.20 +        for (Class clazz : classes) {
    6.21 +            Method[] arr = clazz.getMethods();
    6.22 +            for (Method m : arr) {
    6.23 +                registerCompareCases(m, l, ret, brwsr);
    6.24 +                registerBrwsrCases(m, l, ret, brwsr);
    6.25 +            }
    6.26          }
    6.27          return ret.toArray();
    6.28      }