Need to convert values toModel to make sure all TCK tests pass properly in FXbrwsr
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 25 Apr 2013 16:41:13 +0200
changeset 38b327590acf26
parent 37 184f08369400
child 39 d1d08fe93ae3
Need to convert values toModel to make sure all TCK tests pass properly in FXbrwsr
json/src/main/java/org/apidesign/html/json/impl/JSON.java
json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
json/src/main/java/org/apidesign/html/json/spi/ContextBuilder.java
json/src/main/java/org/apidesign/html/json/spi/Technology.java
json/src/test/java/net/java/html/json/MapModelTest.java
json/src/test/java/net/java/html/json/ModelTest.java
json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java
ko-fx/src/main/java/org/apidesign/html/kofx/FXContext.java
ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java
     1.1 --- a/json/src/main/java/org/apidesign/html/json/impl/JSON.java	Thu Apr 25 16:21:50 2013 +0200
     1.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/JSON.java	Thu Apr 25 16:41:13 2013 +0200
     1.3 @@ -23,7 +23,9 @@
     1.4  import java.util.HashMap;
     1.5  import java.util.Map;
     1.6  import net.java.html.json.Context;
     1.7 +import static org.apidesign.html.json.impl.ContextAccessor.findTechnology;
     1.8  import org.apidesign.html.json.spi.JSONCall;
     1.9 +import org.apidesign.html.json.spi.Technology;
    1.10  import org.apidesign.html.json.spi.Transfer;
    1.11  
    1.12  /**
    1.13 @@ -79,8 +81,10 @@
    1.14          }
    1.15          return (Number)obj;
    1.16      }
    1.17 -    public static <M> M toModel(Class<M> aClass, Object data, Object object) {
    1.18 -        return aClass.cast(data);
    1.19 +    public static <M> M toModel(Context c, Class<M> aClass, Object data, Object object) {
    1.20 +        Technology<?> t = findTechnology(c);
    1.21 +        Object o = t.toModel(aClass, data);
    1.22 +        return aClass.cast(o);
    1.23      }
    1.24  
    1.25      
     2.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Thu Apr 25 16:21:50 2013 +0200
     2.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Thu Apr 25 16:41:13 2013 +0200
     2.3 @@ -854,7 +854,7 @@
     2.4                  toFinish = ".intValue()";
     2.5              }
     2.6              if (dataName != null && ve.getSimpleName().contentEquals(dataName) && isModel(ve.asType())) {
     2.7 -                toCall = "org.apidesign.html.json.impl.JSON.toModel(" + ve.asType() + ".class, ";
     2.8 +                toCall = "org.apidesign.html.json.impl.JSON.toModel(context, " + ve.asType() + ".class, ";
     2.9              }
    2.10  
    2.11              if (toCall != null) {
     3.1 --- a/json/src/main/java/org/apidesign/html/json/spi/ContextBuilder.java	Thu Apr 25 16:21:50 2013 +0200
     3.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/ContextBuilder.java	Thu Apr 25 16:41:13 2013 +0200
     3.3 @@ -117,6 +117,11 @@
     3.4          public void loadJSON(JSONCall call) {
     3.5              call.notifyError(new UnsupportedOperationException());
     3.6          }
     3.7 +
     3.8 +        @Override
     3.9 +        public <M> M toModel(Class<M> modelClass, Object data) {
    3.10 +            return modelClass.cast(data);
    3.11 +        }
    3.12      }
    3.13      
    3.14  }
     4.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Technology.java	Thu Apr 25 16:21:50 2013 +0200
     4.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Technology.java	Thu Apr 25 16:41:13 2013 +0200
     4.3 @@ -38,6 +38,13 @@
     4.4       */
     4.5      public Data wrapModel(Object model);
     4.6      
     4.7 +    /** Converts an element potentially representing a model into the model.
     4.8 +     * @param modelClass expected class to convert the data to
     4.9 +     * @param data the current data provided from the browser
    4.10 +     * @return the instance of modelClass somehow extracted from the data, may return <code>null</code>
    4.11 +     */
    4.12 +    public <M> M toModel(Class<M> modelClass, Object data);
    4.13 +    
    4.14      /** Binds a property between the model and the data as used by the technology.
    4.15       * 
    4.16       * @param b the description of the requested binding
     5.1 --- a/json/src/test/java/net/java/html/json/MapModelTest.java	Thu Apr 25 16:21:50 2013 +0200
     5.2 +++ b/json/src/test/java/net/java/html/json/MapModelTest.java	Thu Apr 25 16:41:13 2013 +0200
     5.3 @@ -199,5 +199,10 @@
     5.4          public void loadJSON(JSONCall call) {
     5.5              call.notifyError(new UnsupportedOperationException());
     5.6          }
     5.7 +
     5.8 +        @Override
     5.9 +        public <M> M toModel(Class<M> modelClass, Object data) {
    5.10 +            return modelClass.cast(data);
    5.11 +        }
    5.12      }
    5.13  }
     6.1 --- a/json/src/test/java/net/java/html/json/ModelTest.java	Thu Apr 25 16:21:50 2013 +0200
     6.2 +++ b/json/src/test/java/net/java/html/json/ModelTest.java	Thu Apr 25 16:41:13 2013 +0200
     6.3 @@ -268,5 +268,10 @@
     6.4          public Object wrapArray(Object[] arr) {
     6.5              return arr;
     6.6          }
     6.7 +
     6.8 +        @Override
     6.9 +        public <M> M toModel(Class<M> modelClass, Object data) {
    6.10 +            return modelClass.cast(data);
    6.11 +        }
    6.12      }
    6.13  }
     7.1 --- a/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java	Thu Apr 25 16:21:50 2013 +0200
     7.2 +++ b/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java	Thu Apr 25 16:41:13 2013 +0200
     7.3 @@ -157,4 +157,9 @@
     7.4          return replaceArray ? this : arr;
     7.5      }
     7.6  
     7.7 +    @Override
     7.8 +    public <M> M toModel(Class<M> modelClass, Object data) {
     7.9 +        return modelClass.cast(data);
    7.10 +    }
    7.11 +
    7.12  }
     8.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/FXContext.java	Thu Apr 25 16:21:50 2013 +0200
     8.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/FXContext.java	Thu Apr 25 16:41:13 2013 +0200
     8.3 @@ -86,4 +86,12 @@
     8.4      public void loadJSON(final JSONCall call) {
     8.5          LoadJSON.loadJSON(call);
     8.6      }
     8.7 +
     8.8 +    @Override
     8.9 +    public <M> M toModel(Class<M> modelClass, Object data) {
    8.10 +        if (data instanceof JSObject) {
    8.11 +            data = ((JSObject)data).getMember("ko-fx.model"); // NOI18N
    8.12 +        }
    8.13 +        return modelClass.cast(data);
    8.14 +    }
    8.15  }
     9.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java	Thu Apr 25 16:21:50 2013 +0200
     9.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java	Thu Apr 25 16:41:13 2013 +0200
     9.3 @@ -85,7 +85,7 @@
     9.4          try {
     9.5              InvokeJS.KObject.call("bind", bindings, pb, prop, "getValue", pb.isReadOnly() ? null : "setValue", primitive, array);
     9.6              
     9.7 -            ((JSObject)bindings).setMember("koModel", model);
     9.8 +            ((JSObject)bindings).setMember("ko-fx.model", model);
     9.9              LOG.log(Level.FINE, "binding defined for {0}: {1}", new Object[]{prop, ((JSObject)bindings).getMember(prop)});
    9.10          } catch (Throwable ex) {
    9.11              LOG.log(Level.WARNING, "binding failed for {0} on {1}", new Object[]{prop, bindings});