Remove remaining use of JSON.stringify() and replace with simple StringBuilder concatenation.
Patch by: bobv
Review by: cromwellian

Review at http://gwt-code-reviews.appspot.com/960801


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8939 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/ClientRequestHelper.java b/user/src/com/google/gwt/requestfactory/client/impl/ClientRequestHelper.java
deleted file mode 100644
index dcd532a..0000000
--- a/user/src/com/google/gwt/requestfactory/client/impl/ClientRequestHelper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.requestfactory.client.impl;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import java.util.Map;
-
-/**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
- * A convenience class to convert a Map<String, String> to a JSON string on the
- * client side.
- */
-public class ClientRequestHelper {
-
-  private static class MyJSO extends JavaScriptObject {
-    static native MyJSO create() /*-{
-      return {};
-    }-*/;
-
-    @SuppressWarnings("unused")
-    protected MyJSO() {
-    }
-
-    private native void put(String key, String value)/*-{
-      // TODO(jgw): Find a better way to do this. Occasionally a js-wrapped
-      // string ends up in 'value', which breaks the json2.js implementation
-      // of JSON.stringify().
-      this[key] = (value == null) ? null : String(value);
-    }-*/;
-
-    private native String toJsonString()/*-{
-      var gwt = this.__gwt_ObjectId;
-      delete this.__gwt_ObjectId;
-      var rtn = $wnd.JSON.stringify(this);
-      this.__gwt_ObjectId = gwt;
-      return rtn;
-    }-*/;
-  }
-
-  public static String getRequestString(Map<String, String> requestData) {
-    MyJSO request = MyJSO.create();
-    for (String key : requestData.keySet()) {
-      request.put(key, requestData.get(key));
-    }
-    return request.toJsonString();
-  }
-}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/messages/RequestContentData.java b/user/src/com/google/gwt/requestfactory/client/impl/messages/RequestContentData.java
index 5a945eb..f955bf0 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/messages/RequestContentData.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/messages/RequestContentData.java
@@ -16,7 +16,6 @@
 package com.google.gwt.requestfactory.client.impl.messages;
 
 import com.google.gwt.core.client.JsonUtils;
-import com.google.gwt.requestfactory.client.impl.ClientRequestHelper;
 import com.google.gwt.requestfactory.shared.WriteOperation;
 
 import java.util.EnumMap;
@@ -33,6 +32,10 @@
    */
   public static String flattenKeysToExpressions(
       Map<String, String> keysToExpressions) {
+    if (keysToExpressions.isEmpty()) {
+      return "{}";
+    }
+
     StringBuilder flattenedProperties = new StringBuilder();
     for (Map.Entry<String, String> entry : keysToExpressions.entrySet()) {
       flattenedProperties.append(",").append(
@@ -89,7 +92,7 @@
     Map<String, String> toReturn = new LinkedHashMap<String, String>();
     addToReturn(toReturn, WriteOperation.PERSIST);
     addToReturn(toReturn, WriteOperation.UPDATE);
-    return ClientRequestHelper.getRequestString(toReturn);
+    return flattenKeysToExpressions(toReturn);
   }
 
   /**