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&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);