You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by be...@apache.org on 2008/09/23 23:50:22 UTC

svn commit: r698365 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/preload/ main/java/org/apache/shindig/gadgets/servlet/ test/java/o...

Author: beaton
Date: Tue Sep 23 14:50:21 2008
New Revision: 698365

URL: http://svn.apache.org/viewvc?rev=698365&view=rev
Log:

Move formatting of makeRequest responses into a utility class.


Added:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java   (with props)
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java   (with props)
Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.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

Added: 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=698365&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java Tue Sep 23 14:50:21 2008
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 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.List;
+import java.util.Map;
+
+/**
+ * Handles converting HttpResponse objects to the format expected by the makeRequest javascript.
+ */
+public class FetchResponseUtils {
+
+  /**
+   * Convert a response to a JSON object.
+   * 
+   * The returned JSON object contains the following values:
+   * rc: integer response code
+   * body: string response body
+   * headers: object, keys are header names, values are lists of header values
+   * 
+   * @param response the response body
+   * @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 body)
+      throws JSONException {
+    JSONObject resp = new JSONObject();
+    resp.put("rc", response.getHttpStatusCode());
+    resp.put("body", body);
+    JSONObject headers = new JSONObject();
+    addHeaders(headers, response, "set-cookie");
+    addHeaders(headers, response, "location");
+    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 {
+    List<String> values = response.getHeaders(headerName);
+    if (!values.isEmpty()) {
+      headers.put(headerName.toLowerCase(), new JSONArray(values));
+    }
+  }
+  
+}

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java?rev=698365&r1=698364&r2=698365&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java Tue Sep 23 14:50:21 2008
@@ -57,7 +57,7 @@
   }
 
   /**
-   * @param responseString The response string.  Converted to UTF-8 bytes and copied when set.
+   * @param body The response string.  Converted to UTF-8 bytes and copied when set.
    */
   public HttpResponseBuilder setResponseString(String body) {
     responseBytes = CharsetUtil.getUtf8Bytes(body);

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=698365&r1=698364&r2=698365&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 Tue Sep 23 14:50:21 2008
@@ -19,12 +19,12 @@
 package org.apache.shindig.gadgets.preload;
 
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.FetchResponseUtils;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.ContentFetcherFactory;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.servlet.MakeRequestHandler;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.Preload;
 import org.json.JSONException;
@@ -92,7 +92,7 @@
     public HttpPreloadData(HttpResponse response) {
       JSONObject data = null;
       try {
-        data = MakeRequestHandler.getResponseAsJson(response, response.getResponseAsString());
+        data = FetchResponseUtils.getResponseAsJson(response, response.getResponseAsString());
       } catch (JSONException e) {
         data = new JSONObject();
       }

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=698365&r1=698364&r2=698365&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 Tue Sep 23 14:50:21 2008
@@ -24,6 +24,7 @@
 import org.apache.shindig.common.util.Utf8UrlCoder;
 import org.apache.shindig.gadgets.AuthType;
 import org.apache.shindig.gadgets.FeedProcessor;
+import org.apache.shindig.gadgets.FetchResponseUtils;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.ContentFetcherFactory;
 import org.apache.shindig.gadgets.http.HttpRequest;
@@ -34,13 +35,10 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -171,42 +169,6 @@
   }
 
   /**
-   * Convert a response to a JSON object.  static so it can be used by HttpPreloaders as well.
-   * 
-   * The returned JSON object contains the following values:
-   * rc: integer response code
-   * body: string response body
-   * headers: object, keys are header names, values are lists of header values
-   * 
-   * @param response the response body
-   * @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 body)
-      throws JSONException {
-    JSONObject resp = new JSONObject();
-    resp.put("rc", response.getHttpStatusCode());
-    resp.put("body", body);
-    JSONObject headers = new JSONObject();
-    addHeaders(headers, response, "set-cookie");
-    addHeaders(headers, response, "location");
-    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 {
-    List<String> values = response.getHeaders(headerName);
-    if (!values.isEmpty()) {
-      headers.put(headerName.toLowerCase(), new JSONArray(values));
-    }
-  }
-  
-  /**
    * Format a response as JSON, including additional JSON inserted by
    * chained content fetchers.
    */
@@ -218,7 +180,7 @@
       if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) {
         body = processFeed(originalUrl, request, body);
       }
-      JSONObject resp = getResponseAsJson(results, body);
+      JSONObject resp = FetchResponseUtils.getResponseAsJson(results, body);
 
       if (authToken != null) {
         String updatedAuthToken = authToken.getUpdatedToken();

Added: 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=698365&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java Tue Sep 23 14:50:21 2008
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.shindig.gadgets;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.json.JSONObject;
+import org.junit.Test;
+
+/**
+ * Test of FetchResponseUtils
+ */
+public class FetchResponseUtilsTest {
+
+  @Test
+  public void testSimpleResponse() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setHttpStatusCode(999)
+        .create();
+    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+    assertEquals(999, obj.getInt("rc"));
+    assertEquals("body", obj.getString("body"));
+    assertEquals(0, obj.getJSONObject("headers").length());
+  }
+  
+  @Test
+  public void testMetadata() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setHttpStatusCode(999)
+        .setMetadata("metaname", "metavalue")
+        .setMetadata("more meta", "more value")
+        .create();
+    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+    assertEquals(999, obj.getInt("rc"));
+    assertEquals("body", obj.getString("body"));
+    assertEquals("metavalue", obj.getString("metaname"));
+    assertEquals("more value", obj.getString("more meta"));
+  }
+  
+  @Test
+  public void testHeaders() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setHttpStatusCode(999)
+        .setHeader("Set-Cookie", "cookie")
+        .setHeader("location", "somewhere")
+        .create();
+    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+    assertEquals(999, obj.getInt("rc"));
+    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));
+  }
+  
+  @Test
+  public void testMultiValuedHeaders() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setHttpStatusCode(999)
+        .addHeader("Set-Cookie", "cookie")
+        .addHeader("Set-Cookie", "cookie2")
+        .addHeader("Set-Cookie", "cookie3")
+        .create();
+    JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+    assertEquals(999, obj.getInt("rc"));
+    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));
+  }
+}

Propchange: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native