]> source.dussan.org Git - gwtquery.git/commitdiff
Dont try to fix json strings by default, to avoiding quoted numbers and null be unquoted
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Tue, 18 Feb 2014 15:10:17 +0000 (16:10 +0100)
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Tue, 18 Feb 2014 15:10:17 +0000 (16:10 +0100)
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/js/JsUtils.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
gwtquery-core/src/main/super/com/google/gwt/query/super/com/google/gwt/query/client/GQ.java
gwtquery-core/src/test/java/com/google/gwt/query/client/ajax/AjaxTests.java
gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java

index 292321b8d92f8b2c67811b1c780ac5fc038be4f4..a780602cdad0d46ab21ac85feaacd79cacdbbd66 100644 (file)
@@ -64,13 +64,25 @@ public abstract class GQ {
   }
   
   /**
-   * Create an instance of IsProperties. Normally a Properties javascript 
-   * object in client side, or a proxy object in the JVM
+   * Create an instance of IsProperties, a Properties JavaScriptObject in the client
+   * side and a proxy object in the JVM.
    */
   public static IsProperties create(String s) {
     return getFactory().create(s);
   }
-  
+
+  /**
+   * Create an instance of IsProperties, a Properties JavaScriptObject in the client
+   * side and a proxy object in the JVM.
+   *
+   * If fixJson is set, we correct certain errors in the Json string. It is useful
+   * for generating Properties using java strings, so as we can use a more relaxed 
+   * syntax.
+   */
+  public static IsProperties create(String s, boolean fixJson) {
+    return getFactory().create(fixJson ? Properties.wrapPropertiesString(s) : s);
+  }
+
   /**
    * Return the appropriate transport implementation depending on the runtime
    * environment: browser or JVM 
index ed39d4ebe14930e9439d86170f57f59aed9609b8..db35f5d6e37118661572ffbb4db3ebf3c65b71b4 100644 (file)
@@ -45,6 +45,15 @@ public class Properties extends JavaScriptObject implements IsProperties {
     return create();
   }
 
+  /**
+   * Allows using a more relaxed syntax for creating json objects from strings.
+   *
+   * It is very useful in java, since we dont have to use escaped double quotes,
+   * and we can pass directly css strings.
+   *
+   * Example:
+   * $$("a: b; c: 'n'; d: null") is the same than $$("\"a\": \"b\", "\b\":\"n\"n, \"d\":null)")
+   */
   public static String wrapPropertiesString(String s) {
     String ret = s //
         .replaceAll("\\s*/\\*[\\s\\S]*?\\*/\\s*", "") // Remove comments
index ac01f7caeb477c6d4873ae25d250532ae58930d6..6acee884d5a901c9ef96fd7f59233a899cbe312c 100644 (file)
@@ -432,6 +432,7 @@ public class JsUtils {
     } catch (Exception e) {
       if (!GWT.isProdMode()) {
         System.err.println("Error while parsing json: " + e.getMessage() + ".\n" + json);
+        new RuntimeException().printStackTrace();
       }
       return Properties.create();
     }
index 270db7046a6cabcd3781e6a47e9014765a5abc36..f85177dea8c0050628cf414bd162a5d0f3b6b11d 100644 (file)
@@ -43,6 +43,7 @@ import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.builders.JsonBuilderBase;
 import com.google.gwt.query.client.builders.JsonFactory;
 import com.google.gwt.query.client.builders.Name;
+import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
 import com.google.gwt.user.rebind.SourceWriter;
 
@@ -324,7 +325,7 @@ public class JsonBuilderGenerator extends Generator {
     sw.println("}");
     sw.println("public " + IsProperties.class.getName() + " create(String s) {");
     sw.indent();
-    sw.println("return " + Properties.class.getName() + ".create(s);");
+    sw.println("return (" + IsProperties.class.getName() + ")" + JsUtils.class.getName() + ".parseJSON(s);");
     sw.outdent();
     sw.println("}");
     sw.println("public " + IsProperties.class.getName() + " create() {");
index 97243244c01ab5358fa9e13fbb933b0071fe5216..775a789f8754e89c29083f0f75122063e9fbe3da 100644 (file)
@@ -179,7 +179,11 @@ public class JsonFactoryJre implements JsonFactory  {
       } else if (mname.matches("getProperties|getDataImpl")) {
         return jsonObject;
       } else if (largs > 0 && ("parse".equals(mname) || "load".equals(mname))) {
-        jsonObject = new JSONObject(String.valueOf(args[0]));
+        String json = String.valueOf(args[0]);
+        if (largs > 1 && Boolean.TRUE.equals(args[0])) {
+          json = Properties.wrapPropertiesString(json);
+        }
+        jsonObject = new JSONObject(json);
       } else if (mname.matches("toString")) {
         return jsonObject.toString();
       } else if (mname.matches("toJsonWithName")) {
@@ -296,7 +300,7 @@ public class JsonFactoryJre implements JsonFactory  {
   @Override
   public IsProperties create(String s) {
     IsProperties ret = createBinder();
-    ret.parse(Properties.wrapPropertiesString(s));
+    ret.parse(s);
     return ret;
   }
 
index 7f8fb42e9b1427ea164145192f7622c3a7666e7e..3647538b57b906d3880059421ce24856589ba3e3 100644 (file)
@@ -17,6 +17,7 @@ package com.google.gwt.query.client;
 
 import com.google.gwt.core.shared.GWT;
 import com.google.gwt.query.client.IsProperties;
+import com.google.gwt.query.client.Properties;
 import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.builders.JsonFactory;
 import com.google.gwt.query.client.plugins.ajax.AjaxTransportJs;
@@ -44,6 +45,10 @@ public class GQ {
     return getFactory().create(s);
   }
 
+  public static IsProperties create(String s, boolean fix) {
+    return getFactory().create(fix ? Properties.wrapPropertiesString(s) : s);
+  }
+
   public static IsProperties create() {
     return getFactory().create();
   }
index f5d0cbf54b2f51f30698fdf34d3569c391354601..1920afc3aa418fa06a80d3ae55e16d0ed87bc40c 100644 (file)
@@ -50,8 +50,8 @@ public abstract class AjaxTests extends GWTTestCase {
   };
   
   public AjaxTests() {
-    jsonGET = GQ.create("data: {a: abc, d: def}");
-    json = GQ.create("a: abc, d: def");
+    jsonGET = GQ.create("data: {a: abc, d: def}", true);
+    json = GQ.create("a: abc, d: def", true);
   }
   
   private Promise performAjaxJsonTest(Settings s) {
index 874fb6ef78eafdee775317a44089e86ccd987240..965bf1614e0673de33af74c1cedc023437a66b61 100644 (file)
@@ -22,6 +22,7 @@ import java.util.List;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.query.client.Function;
 import com.google.gwt.query.client.GQ;
+import com.google.gwt.query.client.IsProperties;
 import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.builders.Name;
 
@@ -34,6 +35,26 @@ public class DataBindingTestJre extends GWTTestCase {
     return null;
   }
 
+  public void testPropertiesCreate() {
+    IsProperties p1 = GQ.create();
+    p1.set("a", "1");
+    p1.set("b", 1);
+    p1.set("c", "null");
+    p1.set("d", null);
+
+    assertEquals("1", p1.get("a"));
+    assertEquals(Double.valueOf(1), p1.get("b"));
+    assertEquals("null", p1.get("c"));
+    assertNull(p1.get("d"));
+
+    p1 = GQ.create(p1.toJson());
+
+    assertEquals("1", p1.get("a"));
+    assertEquals(Double.valueOf(1), p1.get("b"));
+    assertEquals("null", p1.get("c"));
+    assertNull(p1.get("d"));
+  }
+
   public interface Item extends JsonBuilder {
     public static enum Type {BIG, SMALL}