Tons of in VM and in page logging fx
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 14 Apr 2013 11:52:36 +0200
branchfx
changeset 97983f4aa79c130
parent 978 5aa8bc3c98b0
child 980 1ea155524be4
Tons of in VM and in page logging
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOProperty.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java	Sun Apr 14 11:51:58 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java	Sun Apr 14 11:52:36 2013 +0200
     1.3 @@ -165,7 +165,9 @@
     1.4              }
     1.5              if (toKO != null) {
     1.6                  try {
     1.7 +                    Object prev = arr[i];
     1.8                      arr[i] = toKO.invoke(arr[i]);
     1.9 +                    LOG.log(Level.INFO, "{0}th element {1} replaced by {2}", new Object[]{i, prev, arr[i]});
    1.10                  } catch (IllegalAccessException | InvocationTargetException ex) {
    1.11                      LOG.log(Level.SEVERE, "Problems invoking koData on " + arr[i], ex);
    1.12                  }
     2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOProperty.java	Sun Apr 14 11:51:58 2013 +0200
     2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOProperty.java	Sun Apr 14 11:52:36 2013 +0200
     2.3 @@ -51,6 +51,7 @@
     2.4      }
     2.5      
     2.6      public void set(Object value) throws Exception {
     2.7 +        LOG.log(Level.INFO, "{0} set to {1}", new Object[] { setter, value });
     2.8          setter.invoke(obj, value);
     2.9      }
    2.10  }
     3.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Sun Apr 14 11:51:58 2013 +0200
     3.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Sun Apr 14 11:52:36 2013 +0200
     3.3 @@ -66,12 +66,33 @@
     3.4          this.model = model == null ? this : model;
     3.5      }
     3.6      
     3.7 +    public Object koData() {
     3.8 +        return model;
     3.9 +    }
    3.10 +
    3.11 +    private static final JSObject KObject;
    3.12 +    static {
    3.13 +        KObject = (JSObject) web().executeScript(
    3.14 +            "(function(scope) {"
    3.15 +            + "  var kCnt = 0; "
    3.16 +            + "  scope.KObject = {};"
    3.17 +            + "  scope.KObject.create= function(value) {"
    3.18 +            + "    var cnt = ++kCnt;"
    3.19 +            + "    var ret = {};"
    3.20 +            + "    ret.toString = function() { return 'KObject' + cnt + ' value: ' + value; };"
    3.21 +            + "    return ret;"
    3.22 +            + "  };"
    3.23 +            + "})(window); window.KObject"
    3.24 +            );
    3.25 +    }
    3.26 +    
    3.27      public static <M> Knockout applyBindings(
    3.28          Object model, String[] propsGettersAndSetters,
    3.29          String[] methodsAndSignatures
    3.30      ) {
    3.31 -        applyImpl(propsGettersAndSetters, model.getClass(), model, model, methodsAndSignatures);
    3.32 -        return new Knockout(model);
    3.33 +        Object bindings = KObject.call("create", model);
    3.34 +        applyImpl(propsGettersAndSetters, model.getClass(), bindings, model, methodsAndSignatures);
    3.35 +        return new Knockout(bindings);
    3.36      }
    3.37      public static <M> Knockout applyBindings(
    3.38          Class<M> modelClass, M model, String[] propsGettersAndSetters,
    3.39 @@ -80,7 +101,7 @@
    3.40          Object bindings = next;
    3.41          next = null;
    3.42          if (bindings == null) {
    3.43 -            bindings = web().executeScript("new Object()");
    3.44 +            bindings = KObject.call("create", model);
    3.45          }
    3.46          applyImpl(propsGettersAndSetters, modelClass, bindings, model, methodsAndSignatures);
    3.47          applyBindings(bindings);
    3.48 @@ -128,13 +149,23 @@
    3.49          + "  read: function() {"
    3.50          + "    try {"
    3.51          + "      var v = model[getter]();"
    3.52 -        + "      try { v = v.koData(); } catch (ignore) {};"
    3.53 +        + "      console.log(\" getter value \" + v + \" for property \" + prop);"
    3.54 +        + "      try { v = v.koData(); } catch (ignore) {"
    3.55 +        + "        console.log(\"Cannot convert to koData: \" + ignore);"
    3.56 +        + "      };"
    3.57 +        + "      console.log(\" getter ret value \" + v);"
    3.58 +        + "      for (var pn in v) {"
    3.59 +        + "         console.log(\"  prop: \" + pn + \" + in + \" + v + \" = \" + v[pn]);"
    3.60 +        + "         if (typeof v[pn] == \"function\") console.log(\"  its function value:\" + v[pn]());"
    3.61 +        + "      }"
    3.62 +        + "      console.log(\" all props printed for \" + (typeof v));"
    3.63          + "      return v;"
    3.64          + "    } catch (e) {"
    3.65          + "      alert(\"Cannot call \" + getter + \" on \" + model + \" error: \" + e);"
    3.66          + "    }"
    3.67          + "  },"
    3.68 -        + "  owner: bindings"
    3.69 +        + "  owner: bindings,"
    3.70 +        + "  deferEvaluation: true"
    3.71          + "};"
    3.72          + "if (setter != null) {"
    3.73          + "  bnd.write = function(val) {"
    3.74 @@ -148,9 +179,9 @@
    3.75          try {
    3.76              KOProperty kop = new KOProperty(model, strip(getter), strip(setter));
    3.77              bnd.call("bnd", ko, bindings, kop, prop, "get", "set", primitive, array);
    3.78 -            LOG.log(Level.FINE, "binding defined for {0}: {1}", new Object[]{prop, ((JSObject)bindings).getMember(prop)});
    3.79 +            LOG.log(Level.INFO, "binding defined for {0}: {1}", new Object[]{prop, ((JSObject)bindings).getMember(prop)});
    3.80          } catch (Throwable ex) {
    3.81 -            LOG.log(Level.FINE, "binding failed for {0} on {1}", new Object[]{prop, bindings});
    3.82 +            LOG.log(Level.INFO, "binding failed for {0} on {1}", new Object[]{prop, bindings});
    3.83          }
    3.84      }
    3.85      
     4.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Apr 14 11:51:58 2013 +0200
     4.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Apr 14 11:52:36 2013 +0200
     4.3 @@ -193,7 +193,7 @@
     4.4                  w.append("import org.apidesign.bck2brwsr.htmlpage.api.*;\n");
     4.5                  w.append("import org.apidesign.bck2brwsr.htmlpage.KOList;\n");
     4.6                  w.append("import org.apidesign.bck2brwsr.core.JavaScriptOnly;\n");
     4.7 -                w.append("final class ").append(className).append(" implements Cloneable {\n");
     4.8 +                w.append("public final class ").append(className).append(" implements Cloneable {\n");
     4.9                  w.append("  private boolean locked;\n");
    4.10                  w.append("  private org.apidesign.bck2brwsr.htmlpage.Knockout ko;\n");
    4.11                  w.append(body.toString());
    4.12 @@ -279,6 +279,9 @@
    4.13                  w.append("  };\n");
    4.14                  writeToString(props, w);
    4.15                  writeClone(className, props, w);
    4.16 +                w.append("  public Object koData() {\n");
    4.17 +                w.append("    return ko.koData();\n");
    4.18 +                w.append("  }\n");
    4.19                  w.append("}\n");
    4.20              } finally {
    4.21                  w.close();