You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by et...@apache.org on 2009/04/10 22:56:30 UTC

svn commit: r764050 - in /incubator/shindig/trunk/java: common/src/test/java/org/apache/shindig/common/ gadgets/src/main/java/org/apache/shindig/gadgets/ gadgets/src/main/java/org/apache/shindig/gadgets/preload/ gadgets/src/main/java/org/apache/shindig...

Author: etnu
Date: Fri Apr 10 20:56:29 2009
New Revision: 764050

URL: http://svn.apache.org/viewvc?rev=764050&view=rev
Log:
Migrating more code to JsonSerializer


Modified:
    incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonAssert.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java

Modified: incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonAssert.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonAssert.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonAssert.java (original)
+++ incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonAssert.java Fri Apr 10 20:56:29 2009
@@ -91,4 +91,16 @@
         break;
     }
   }
+
+  public static void assertObjectEquals(Object left, Object right) throws Exception {
+    if (!(left instanceof String)) {
+      left = JsonSerializer.serialize(left);
+    }
+
+    if (!(right instanceof String)){
+      right = JsonSerializer.serialize(right);
+    }
+
+    assertJsonEquals((String) left, (String) right);
+  }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java Fri Apr 10 20:56:29 2009
@@ -19,12 +19,11 @@
 package org.apache.shindig.gadgets;
 
 import org.apache.shindig.gadgets.http.HttpResponse;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
 
-import java.util.Map;
+import com.google.common.collect.Maps;
+
 import java.util.Collection;
+import java.util.Map;
 
 /**
  * Handles converting HttpResponse objects to the format expected by the makeRequest javascript.
@@ -33,43 +32,47 @@
 
   /**
    * Convert a response to a JSON object.
-   * 
+   *
    * The returned JSON object contains the following values:
    * id: the id of the response
    * rc: integer response code
    * body: string response body
    * headers: object, keys are header names, values are lists of header values
-   * 
+   *
+   * The returned object is guaranteed to be mutable.
+   *
    * @param response the response body
    * @param id the response id, or null if not needed
    * @param body string to use as the body of the response.
    * @return a JSONObject representation of the response body.
    */
-  public static JSONObject getResponseAsJson(HttpResponse response, String id, String body)
-      throws JSONException {
-    JSONObject resp = new JSONObject();
+  public static Map<String, Object> getResponseAsJson(HttpResponse response, String id,
+      String body) {
+    Map<String, Object> resp = Maps.newHashMap();
     if (id != null) {
       resp.put("id", id);
     }
     resp.put("rc", response.getHttpStatusCode());
     resp.put("body", body);
-    JSONObject headers = new JSONObject();
+    Map<String, Collection<String>> headers = Maps.newHashMap();
     addHeaders(headers, response, "set-cookie");
     addHeaders(headers, response, "location");
-    resp.put("headers", headers);
+    if (headers.size() > 0) {
+      resp.put("headers", headers);
+    }
     // Merge in additional response data
     for (Map.Entry<String, String> entry : response.getMetadata().entrySet()) {
       resp.put(entry.getKey(), entry.getValue());
     }
     return resp;
   }
-  
-  private static void addHeaders(JSONObject headers, HttpResponse response, String headerName)
-      throws JSONException {
-    Collection<String> values = response.getHeaders(headerName);
+
+  private static void addHeaders(Map<String, Collection<String>> headers, HttpResponse response,
+      String name) {
+    Collection<String> values = response.getHeaders(name);
     if (!values.isEmpty()) {
-      headers.put(headerName.toLowerCase(), new JSONArray(values));
+      headers.put(name.toLowerCase(), values);
     }
   }
-  
+
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java Fri Apr 10 20:56:29 2009
@@ -33,11 +33,9 @@
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 
-import org.json.JSONException;
-import org.json.JSONObject;
-
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
@@ -103,16 +101,11 @@
    * Implements PreloadData by returning a Map that matches the output format used by makeRequest.
    */
   private static class HttpPreloadData implements PreloadedData {
-    private final JSONObject data;
+    private final Map<String, Object> data;
 
     public HttpPreloadData(HttpResponse response, String key) {
-      JSONObject data = null;
-      try {
-        data = FetchResponseUtils.getResponseAsJson(response, key, response.getResponseAsString());
-      } catch (JSONException e) {
-        data = new JSONObject();
-      }
-      this.data = data;
+      this.data
+          = FetchResponseUtils.getResponseAsJson(response, key, response.getResponseAsString());
     }
 
     public Collection<Object> toJson() {

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java Fri Apr 10 20:56:29 2009
@@ -20,6 +20,7 @@
 
 import org.apache.shindig.auth.AuthInfo;
 import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.common.JsonSerializer;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.util.Utf8UrlCoder;
 import org.apache.shindig.gadgets.AuthType;
@@ -35,10 +36,9 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import org.json.JSONException;
-import org.json.JSONObject;
-
 import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -171,29 +171,26 @@
    */
   private String convertResponseToJson(SecurityToken authToken, HttpServletRequest request,
       HttpResponse results) throws GadgetException {
-    try {
-      String originalUrl = request.getParameter(ProxyBase.URL_PARAM);
-      String body = "";
-      if (results.getHttpStatusCode() == 200) {
-        body = results.getResponseAsString();
+    String originalUrl = request.getParameter(ProxyBase.URL_PARAM);
+    String body = "";
+    if (results.getHttpStatusCode() == 200) {
+      body = results.getResponseAsString();
 
-        if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) {
-          body = processFeed(originalUrl, request, body);
-        }
+      if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) {
+        body = processFeed(originalUrl, request, body);
       }
-      JSONObject resp = FetchResponseUtils.getResponseAsJson(results, null, body);
+    }
+    Map<String, Object> resp = FetchResponseUtils.getResponseAsJson(results, null, body);
 
-      if (authToken != null) {
-        String updatedAuthToken = authToken.getUpdatedToken();
-        if (updatedAuthToken != null) {
-          resp.put("st", updatedAuthToken);
-        }
+    if (authToken != null) {
+      String updatedAuthToken = authToken.getUpdatedToken();
+      if (updatedAuthToken != null) {
+        resp.put("st", updatedAuthToken);
       }
-      // Use raw param as key as URL may have to be decoded
-      return new JSONObject().put(originalUrl, resp).toString();
-    } catch (JSONException e) {
-      return "";
     }
+
+    // Use raw param as key as URL may have to be decoded
+    return JsonSerializer.serialize(Collections.singletonMap(originalUrl, resp));
   }
 
   /**

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java Fri Apr 10 20:56:29 2009
@@ -18,14 +18,14 @@
  */
 package org.apache.shindig.gadgets;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
+import org.apache.shindig.common.JsonAssert;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
-import org.json.JSONObject;
+
 import org.junit.Test;
 
+import java.util.Map;
+
 /**
  * Test of FetchResponseUtils
  */
@@ -36,13 +36,11 @@
     HttpResponse response = new HttpResponseBuilder()
         .setHttpStatusCode(999)
         .create();
-    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
-    assertEquals(999, obj.getInt("rc"));
-    assertEquals("key", obj.getString("id"));
-    assertEquals("body", obj.getString("body"));
-    assertEquals(0, obj.getJSONObject("headers").length());
+    Map<String, Object> obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
+
+    JsonAssert.assertObjectEquals("{'rc':999,'id':'key',body:'body'}", obj);
   }
-  
+
   @Test
   public void testMetadata() throws Exception {
     HttpResponse response = new HttpResponseBuilder()
@@ -50,31 +48,24 @@
         .setMetadata("metaname", "metavalue")
         .setMetadata("more meta", "more value")
         .create();
-    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, null, "body");
-    assertEquals(999, obj.getInt("rc"));
-    assertFalse(obj.has("id"));
-    assertEquals("body", obj.getString("body"));
-    assertEquals("metavalue", obj.getString("metaname"));
-    assertEquals("more value", obj.getString("more meta"));
+    Map<String, Object> obj = FetchResponseUtils.getResponseAsJson(response, null, "body");
+
+    JsonAssert.assertObjectEquals(
+        "{rc:999,body:'body',metaname:'metavalue','more meta':'more value'}", obj);
   }
-  
+
   @Test
   public void testHeaders() throws Exception {
     HttpResponse response = new HttpResponseBuilder()
         .setHttpStatusCode(999)
         .setHeader("Set-Cookie", "cookie")
-        .setHeader("location", "somewhere")
+        .setHeader("location", "here")
         .create();
-    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
-    assertEquals(999, obj.getInt("rc"));
-    assertEquals("key", obj.getString("id"));
-    assertEquals("body", obj.getString("body"));
-    assertEquals(1, obj.getJSONObject("headers").getJSONArray("set-cookie").length());
-    assertEquals("cookie", obj.getJSONObject("headers").getJSONArray("set-cookie").get(0));
-    assertEquals(1, obj.getJSONObject("headers").getJSONArray("location").length());
-    assertEquals("somewhere", obj.getJSONObject("headers").getJSONArray("location").get(0));
+    Map<String, Object> obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
+    JsonAssert.assertObjectEquals(
+        "{rc:999,id:'key',body:'body',headers:{set-cookie:['cookie'],location:['here']}}", obj);
   }
-  
+
   @Test
   public void testMultiValuedHeaders() throws Exception {
     HttpResponse response = new HttpResponseBuilder()
@@ -83,13 +74,8 @@
         .addHeader("Set-Cookie", "cookie2")
         .addHeader("Set-Cookie", "cookie3")
         .create();
-    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
-    assertEquals(999, obj.getInt("rc"));
-    assertEquals("key", obj.getString("id"));
-    assertEquals("body", obj.getString("body"));
-    assertEquals(3, obj.getJSONObject("headers").getJSONArray("set-cookie").length());
-    assertEquals("cookie", obj.getJSONObject("headers").getJSONArray("set-cookie").get(0));
-    assertEquals("cookie2", obj.getJSONObject("headers").getJSONArray("set-cookie").get(1));
-    assertEquals("cookie3", obj.getJSONObject("headers").getJSONArray("set-cookie").get(2));
+    Map<String, Object> obj = FetchResponseUtils.getResponseAsJson(response, "key", "body");
+    JsonAssert.assertObjectEquals(
+        "{rc:999,id:'key',body:'body',headers:{set-cookie:['cookie','cookie2','cookie3']}}", obj);
   }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java?rev=764050&r1=764049&r2=764050&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java Fri Apr 10 20:56:29 2009
@@ -22,9 +22,9 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.shindig.common.JsonAssert;
 import org.apache.shindig.gadgets.AuthType;
 import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpFetcher;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -34,15 +34,15 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
-import org.json.JSONException;
-import org.json.JSONObject;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.concurrent.Callable;
 
 /**
@@ -64,7 +64,7 @@
       return oauthFetcher.fetch(request);
     }
 
-    public void normalizeProtocol(HttpRequest request) throws GadgetException {}
+    public void normalizeProtocol(HttpRequest request) {}
   };
 
   private void checkRequest(HttpRequest request) {
@@ -73,15 +73,19 @@
     assertEquals(context.getToken().getAppId(), request.getSecurityToken().getAppId());
   }
 
-  private static void checkResults(JSONObject results) throws JSONException {
-    assertEquals(PRELOAD_CONTENT, results.get("body"));
-    assertEquals(HttpResponse.SC_OK, results.getInt("rc"));
-    assertEquals("yo=momma", results.getJSONObject("headers").getJSONArray("set-cookie").get(0));
-
-    for (Entry<String, String> entry : PRELOAD_METADATA.entrySet()) {
-      assertEquals("Metadata values not copied to output.",
-          entry.getValue(), results.get(entry.getKey()));
-    }
+  private static void checkResults(Object results, String url) throws Exception {
+    Map<String, Object> expected = Maps.newHashMap();
+    expected.put("body", PRELOAD_CONTENT);
+    expected.put("rc", HttpResponse.SC_OK);
+    expected.put("id", url);
+    expected.put("headers", Collections.singletonMap("set-cookie", Arrays.asList("yo=momma")));
+    expected.putAll(PRELOAD_METADATA);
+
+    JsonAssert.assertObjectEquals(expected, results);
+  }
+
+  private static void checkResults(Object results) throws Exception {
+    checkResults(results, PRELOAD_HREF);
   }
 
   @Test
@@ -104,7 +108,7 @@
     PreloadedData data = preloaded.iterator().next().call();
 
     checkRequest(plainFetcher.requests.get(0));
-    checkResults((JSONObject) data.toJson().iterator().next());
+    checkResults(data.toJson().iterator().next());
   }
 
   @Test
@@ -130,7 +134,7 @@
     checkRequest(request);
     assertTrue(request.getOAuthArguments().getSignOwner());
     assertFalse(request.getOAuthArguments().getSignViewer());
-    checkResults((JSONObject) data.toJson().iterator().next());
+    checkResults(data.toJson().iterator().next());
   }
 
   @Test
@@ -155,7 +159,7 @@
 
     HttpRequest request = oauthFetcher.requests.get(0);
     checkRequest(request);
-    checkResults((JSONObject) data.toJson().iterator().next());
+    checkResults(data.toJson().iterator().next());
   }
 
   @Test
@@ -180,14 +184,13 @@
     assertEquals(2, list.size());
 
     checkRequest(plainFetcher.requests.get(0));
-    checkResults((JSONObject) list.get(0));
+    checkResults(list.get(0));
 
     checkRequest(plainFetcher.requests.get(1));
-    checkResults((JSONObject) list.get(1));
+    checkResults(list.get(1), PRELOAD_HREF2);
   }
 
-  private List<Object> getAll(
-      Collection<Callable<PreloadedData>> preloaded) throws Exception {
+  private List<Object> getAll(Collection<Callable<PreloadedData>> preloaded) throws Exception {
     List<Object> list = Lists.newArrayList();
     for (Callable<PreloadedData> preloadCallable : preloaded) {
       list.addAll(preloadCallable.call().toJson());
@@ -218,7 +221,7 @@
     List<Object> list = getAll(preloaded);
     assertEquals(1, list.size());
     checkRequest(plainFetcher.requests.get(0));
-    checkResults((JSONObject) list.get(0));
+    checkResults(list.get(0));
   }
 
   private static class RecordingHttpFetcher implements HttpFetcher {