]> source.dussan.org Git - gwtquery.git/commitdiff
Implement as method to convert between types
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Tue, 7 Jan 2014 06:52:46 +0000 (07:52 +0100)
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Tue, 7 Jan 2014 06:52:46 +0000 (07:52 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/Binder.java
gwtquery-core/src/main/java/com/google/gwt/query/client/GQ.java
gwtquery-core/src/main/java/com/google/gwt/query/client/Properties.java
gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsonBuilder.java
gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsonBuilderBase.java
gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsonBuilderGenerator.java
gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonFactoryJre.java

index ba45ceb1926e3bfe7e8da1c39d6ecc5d63a73203..2f0e47e546cc2eef1e30116134149d291cebfca9 100644 (file)
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.query.client;
 
+import com.google.gwt.query.client.builders.JsonBuilder;
+
 
 /**
  * Interface using for Data Binders valid for JVM and JS.
@@ -73,5 +75,8 @@ public interface Binder {
   /**
    * return the name for this type
    */
-  String getName();
+  String getJsonName();
+  
+  
+  <T extends JsonBuilder> T as (Class<T> clz);
 }
index 5120bf3daf9de54d6b23eca16bd3f31850b6fc32..46cee7e1a0e1f78b1ad9bb0097fe545416ec3de5 100644 (file)
@@ -22,7 +22,6 @@ import com.google.gwt.query.client.plugins.ajax.Ajax.AjaxTransport;
 import com.google.gwt.query.client.plugins.ajax.AjaxTransportJs;
 import com.google.gwt.query.vm.AjaxTransportJre;
 import com.google.gwt.query.vm.JsonFactoryJre;
-import com.google.gwt.user.client.Window;
 
 public abstract class GQ {
   
@@ -39,6 +38,12 @@ public abstract class GQ {
     return ret;
   }
   
+  public static <T extends JsonBuilder> T create(Class<T> clz, Binder obj) {
+    T ret = create(clz);
+    ret.load(obj.getBound());
+    return ret;
+  }
+  
   public static <T extends Binder> T create(String s) {
     return getFactory().create(s);
   }
index b367e19f1ba024dd4c57edbbb099d7208840faef..60ac6a6b8e6e9c6c7012b1a7a5e18f55d191b99b 100644 (file)
@@ -18,6 +18,7 @@ package com.google.gwt.query.client;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArrayMixed;
+import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.js.JsCache;
 import com.google.gwt.query.client.js.JsUtils;
 
@@ -230,8 +231,13 @@ public class Properties extends JavaScriptObject implements Binder {
     return (J)this;
   }
 
-  public final String getName() {
+  public final String getJsonName() {
     return "jso";
   }
 
+  public final <T extends JsonBuilder> T as(Class<T> clz) {
+    T ret = GQ.create(clz);
+    ret.load(this);
+    return ret;
+  }
 }
index 6508d3009b812198ae5231f849bbe2c9e5f9229c..6e6d6f3a17662fb55e386848d44dc99c82b56d93 100644 (file)
@@ -40,5 +40,5 @@ public interface JsonBuilder extends Binder {
   /**
    * return the short name of this class, to use in json structures.
    */
-  String getName();
+  String getJsonName();
 }
index dd45ec7df1d0a9117ec2d227b9cb860522f2f212..c4b5af88a7e9a8ea82dd0a00a58957cd0f3f6a5e 100644 (file)
@@ -97,7 +97,7 @@ public abstract class JsonBuilderBase<J extends JsonBuilderBase<?>> implements J
   }
   
   public String toJsonWithName() {
-    return "{\"" + getName() + "\":" + p.tostring() + "}";
+    return "{\"" + getJsonName() + "\":" + p.tostring() + "}";
   }
 
   @SuppressWarnings("unchecked")
@@ -126,4 +126,8 @@ public abstract class JsonBuilderBase<J extends JsonBuilderBase<?>> implements J
     p.set(key, val);
     return (T)this;
   }
+  
+  public <T extends JsonBuilder> T as(Class<T> clz) {
+    return p.as(clz);
+  }
 }
index e1c905af4d5d21727d2a92df80595ac68fa71eed..38f32b0ef19a6eac267baac9a235064dfd83b070 100644 (file)
@@ -273,7 +273,6 @@ public class JsonBuilderGenerator extends Generator {
 
   public void generateToJsonMethod(SourceWriter sw, String name, TreeLogger logger) {
     sw.println("public final String getJsonName() {return \"" + name + "\";}");
-    sw.println("public final String getName() {return \"" + name + "\";}");
   }
 
   protected SourceWriter getSourceWriter(TreeLogger logger,
index d3820772a190ac8aeb73e8011ab9a485d8d2b924..abef1b8f076798db5d6667b6e303ce3232e9ec23 100644 (file)
@@ -16,6 +16,7 @@ import org.json.JSONObject;
 
 import com.google.gwt.query.client.Binder;
 import com.google.gwt.query.client.Function;
+import com.google.gwt.query.client.GQ;
 import com.google.gwt.query.client.Properties;
 import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.builders.JsonFactory;
@@ -165,7 +166,10 @@ public class JsonFactoryJre implements JsonFactory  {
 
       if ("getFieldNames".equals(mname)) {
         return JSONObject.getNames(jsonObject);
-      } else if ("getName".equals(mname)) {
+      } else if ("as".equals(mname)) {
+        Class<? extends JsonBuilder> clz = (Class<? extends JsonBuilder>)args[0];
+        return jsonFactory.create(clz, jsonObject);
+      } else if ("getJsonName".equals(mname)) {
         return JsonBuilderGenerator.classNameToJsonName(getDataBindingClassName(proxy.getClass()));
       } else if (mname.matches("getProperties|getBound")) {
         return jsonObject;