Author: awiner
Date: Tue Feb 17 18:02:21 2009
New Revision: 745175

URL: http://svn.apache.org/viewvc?rev=745175&view=rev
Log:
SHINDIG-739: Data Pipelining (in part)
Implement @params on os:HttpRequest.  Implementation does not yet properly 
escape
EL evaluation per the current spec.

Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java?rev=745175&r1=745174&r2=745175&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
 Tue Feb 17 18:02:21 2009
@@ -185,13 +185,26 @@
         }
       }
 
-      // TODO: support non GET/POST methods
       String method = preload.getAttributes().get("method");
       if (method != null) {
         request.setMethod(method);
       }
+      
+      // TODO: params EL implementation is not yet properly escaped per spec
+      String params = preload.getAttributes().get("params");
+      if ((params != null) && !"".equals(params)) { 
+        if ("POST".equalsIgnoreCase(request.getMethod())) {
+          request.setPostBody(params.getBytes("UTF-8"));
+          request.setHeader("Content-Type", 
"application/x-www-form-urlencoded; charset=utf-8");
+        } else {
+          UriBuilder uriBuilder = new UriBuilder(request.getUri());
+          String query = uriBuilder.getQuery();
+          query = query == null ? params : query + "&" + params;
+          uriBuilder.setQuery(query);
+          request.setUri(uriBuilder.toUri());
+        }
+      }
 
-      // TODO: support params
       return new Data(requestPipeline.execute(request));
     }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java?rev=745175&r1=745174&r2=745175&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
 Tue Feb 17 18:02:21 2009
@@ -53,14 +53,32 @@
       + "  <os:PeopleRequest key=\"p\" userIds=\"you\"/>"
       + "  <os:PersonAppDataRequest key=\"a\" userId=\"she\"/>" + 
"</Content></Module>";
 
-  private static final String MAKE_REQUEST_URL =  
"http://example.org/preload.html";;
-  private static final String XML_WITH_MAKE_REQUEST = "<Module xmlns:os=\""
+  private static final String HTTP_REQUEST_URL =  
"http://example.org/preload.html";;
+  private static final String PARAMS = "a=b&c=d";
+  private static final String XML_PARAMS = "a=b&amp;c=d";
+  
+  private static final String XML_WITH_HTTP_REQUEST = "<Module xmlns:os=\""
       + PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
       + "<ModulePrefs title=\"Title\"/>"
       + "<Content href=\"http://example.org/proxied.php\"; view=\"profile\">"
-      + "  <os:HttpRequest key=\"p\" href=\"" + MAKE_REQUEST_URL + "\" "
+      + "  <os:HttpRequest key=\"p\" href=\"" + HTTP_REQUEST_URL + "\" "
       + "refreshInterval=\"60\" method=\"POST\"/>" + "</Content></Module>";
 
+  private static final String XML_WITH_HTTP_REQUEST_AND_PARAMS = "<Module 
xmlns:os=\""
+    + PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
+    + "<ModulePrefs title=\"Title\"/>"
+    + "<Content href=\"http://example.org/proxied.php\"; view=\"profile\">"
+    + "  <os:HttpRequest key=\"p\" href=\"" + HTTP_REQUEST_URL + "\" "
+    + "                  method=\"POST\" params=\"" + XML_PARAMS + "\"/>"
+    + "</Content></Module>";
+
+  private static final String XML_WITH_HTTP_REQUEST_AND_GET_PARAMS = "<Module 
xmlns:os=\""
+    + PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
+    + "<ModulePrefs title=\"Title\"/>"
+    + "<Content href=\"http://example.org/proxied.php\"; view=\"profile\">"
+    + "  <os:HttpRequest key=\"p\" href=\"" + HTTP_REQUEST_URL + "\" "
+    + "                  method=\"GET\" params=\"" + XML_PARAMS + "\"/>"
+    + "</Content></Module>";
   @Before
   public void createContainerConfig() {
     containerConfig = EasyMock.createMock(ContainerConfig.class);
@@ -105,7 +123,7 @@
 
   @Test
   public void testHttpPreload() throws Exception {
-    GadgetSpec spec = new GadgetSpec(GADGET_URL, XML_WITH_MAKE_REQUEST);
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, XML_WITH_HTTP_REQUEST);
 
     String httpResult = "{foo: 'bar'}";
     RecordingRequestPipeline pipeline = new 
RecordingRequestPipeline(httpResult);
@@ -128,12 +146,56 @@
     assertEquals(1, pipeline.requests.size());
     HttpRequest request = pipeline.requests.get(0);
 
-    assertEquals(MAKE_REQUEST_URL, request.getUri().toString());
+    assertEquals(HTTP_REQUEST_URL, request.getUri().toString());
     assertEquals("POST", request.getMethod());
     assertEquals(60, request.getCacheTtl());
   }
 
   @Test
+  public void testHttpPreloadWithPostParams() throws Exception {
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, 
XML_WITH_HTTP_REQUEST_AND_PARAMS);
+
+    String httpResult = "{foo: 'bar'}";
+    RecordingRequestPipeline pipeline = new 
RecordingRequestPipeline(httpResult);
+    PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline, 
containerConfig);
+    view = "profile";
+
+    Collection<Callable<PreloadedData>> tasks = 
preloader.createPreloadTasks(context, spec,
+        PreloaderService.PreloadPhase.PROXY_FETCH);
+    tasks.iterator().next().call();
+
+    // Should have only fetched one request
+    assertEquals(1, pipeline.requests.size());
+    HttpRequest request = pipeline.requests.get(0);
+
+    assertEquals(HTTP_REQUEST_URL, request.getUri().toString());
+    assertEquals("POST", request.getMethod());
+    assertEquals(PARAMS, request.getPostBodyAsString());
+  }
+
+  @Test
+  public void testHttpPreloadWithGetParams() throws Exception {
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, 
XML_WITH_HTTP_REQUEST_AND_GET_PARAMS);
+
+    String httpResult = "{foo: 'bar'}";
+    RecordingRequestPipeline pipeline = new 
RecordingRequestPipeline(httpResult);
+    PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline, 
containerConfig);
+    view = "profile";
+
+    Collection<Callable<PreloadedData>> tasks = 
preloader.createPreloadTasks(context, spec,
+        PreloaderService.PreloadPhase.PROXY_FETCH);
+    tasks.iterator().next().call();
+
+    // Should have only fetched one request
+    assertEquals(1, pipeline.requests.size());
+    HttpRequest request = pipeline.requests.get(0);
+
+    assertEquals(HTTP_REQUEST_URL + "?" + PARAMS, request.getUri().toString());
+    assertEquals("GET", request.getMethod());
+  }
+
+
+  @Test
   public void testSocialPreloadForOtherView() throws Exception {
     GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
 


Reply via email to