You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by aw...@apache.org on 2009/04/07 19:47:58 UTC
svn commit: r762869 - in /incubator/shindig/trunk/java:
common/src/main/java/org/apache/shindig/common/
common/src/test/java/org/apache/shindig/common/
gadgets/src/main/java/org/apache/shindig/gadgets/preload/
gadgets/src/main/java/org/apache/shindig/g...
Author: awiner
Date: Tue Apr 7 17:47:57 2009
New Revision: 762869
URL: http://svn.apache.org/viewvc?rev=762869&view=rev
Log:
Simplify preloader code:
- Removed support for using a List<Preloader>. Preloader is now @ImplementedBy HttpPreloader.
(An early rev made PipleinedDataPreloader no longer a Preloader)
- Removed concept of a Preloader "phase"
- Changed pipeline code to use List and Object instead of JSONArray and JSONObject
- Properly implement error handling (both HTTP and batch error) for social preloads
- Use JsonSerializer instead of toString() for post body of HttpRequest for social preloads
Modified:
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/JsonSerializer.java
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderService.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/preload/PipelineExecutor.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloadModule.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/Preloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateContext.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java
Modified: incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/JsonSerializer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/JsonSerializer.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/JsonSerializer.java (original)
+++ incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/JsonSerializer.java Tue Apr 7 17:47:57 2009
@@ -20,6 +20,7 @@
import org.apache.shindig.common.util.DateUtil;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.MapMaker;
import com.google.common.collect.Maps;
@@ -162,7 +163,7 @@
value.getClass().isEnum()) {
// String-like Primitives
appendString(buf, value.toString());
- } else if(value instanceof Date) {
+ } else if (value instanceof Date) {
appendString(buf, DateUtil.formatIso8601Date((Date)value));
} else if (value instanceof JSONObject) {
appendJsonObject(buf, (JSONObject) value);
@@ -429,6 +430,41 @@
buf.append('"');
}
+ /**
+ * Gets a property of an Object. Will return a property value if
+ * serializing the value would produce a JSON object containing that
+ * property, otherwise returns null.
+ */
+ public static Object getProperty(Object value, String propertyName) {
+ Preconditions.checkNotNull(value);
+ Preconditions.checkNotNull(propertyName);
+
+ if (value instanceof JSONObject) {
+ return ((JSONObject) value).opt(propertyName);
+ } else if (value instanceof Map) {
+ return ((Map<?, ?>) value).get(propertyName);
+ } else {
+ // Try getter conversion
+ Method method = getGetters(value).get(propertyName);
+ if (method != null) {
+ try {
+ return method.invoke(value);
+ } catch (IllegalArgumentException e) {
+ // Shouldn't be possible.
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ // Bad class.
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ // Bad class.
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ return null;
+ }
+
private static Map<String, Method> getGetters(Object pojo) {
Class<?> clazz = pojo.getClass();
Modified: incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java (original)
+++ incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java Tue Apr 7 17:47:57 2009
@@ -20,6 +20,7 @@
import static org.apache.shindig.common.JsonAssert.assertJsonEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
@@ -188,6 +189,31 @@
assertEquals("Hello<world>foo < bar", obj.get("foo"));
}
+ @Test
+ public void getPropertyOfJsonObject() throws Exception {
+ JSONObject json = new JSONObject("{a: 1, b: '2'}");
+ assertEquals(1, JsonSerializer.getProperty(json, "a"));
+ assertEquals("2", JsonSerializer.getProperty(json, "b"));
+ assertNull(JsonSerializer.getProperty(json, "c"));
+ }
+
+ @Test
+ public void getPropertyOfMap() throws Exception {
+ Map<String, Object> map = ImmutableMap.of("a", (Object) 1, "b", "2");
+ assertEquals(1, JsonSerializer.getProperty(map, "a"));
+ assertEquals("2", JsonSerializer.getProperty(map, "b"));
+ assertNull(JsonSerializer.getProperty(map, "c"));
+ }
+
+ @Test
+ public void getPropertyOfPojo() throws Exception {
+ JsonPojo pojo = new JsonPojo();
+ assertEquals("string-value", JsonSerializer.getProperty(pojo, "string"));
+ assertEquals(100, JsonSerializer.getProperty(pojo, "integer"));
+ assertEquals(3, JsonSerializer.getProperty(pojo, "simple!"));
+ assertNull(JsonSerializer.getProperty(pojo, "not"));
+ }
+
private static String avg(long start, long end, long runs) {
double delta = end - start;
return String.format("%f5", delta / runs);
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderService.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderService.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderService.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderService.java Tue Apr 7 17:47:57 2009
@@ -20,13 +20,10 @@
import org.apache.shindig.gadgets.Gadget;
import java.util.Collection;
-import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.FutureTask;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
import com.google.inject.Inject;
/**
@@ -38,25 +35,17 @@
*/
public class ConcurrentPreloaderService implements PreloaderService {
private final ExecutorService executor;
- private final List<? extends Preloader> preloaders;
+ private Preloader preloader;
@Inject
- public ConcurrentPreloaderService(ExecutorService executor, List<Preloader> preloaders) {
+ public ConcurrentPreloaderService(ExecutorService executor, Preloader preloader) {
this.executor = executor;
- this.preloaders = preloaders;
+ this.preloader = preloader;
}
- public Collection<PreloadedData> preload(Gadget gadget, PreloadPhase phase) {
- if (preloaders.isEmpty()) {
- return ImmutableList.of();
- }
-
- List<Callable<PreloadedData>> tasks = Lists.newArrayList();
- for (Preloader preloader : preloaders) {
- Collection<Callable<PreloadedData>> taskCollection =
- preloader.createPreloadTasks(gadget, phase);
- tasks.addAll(taskCollection);
- }
+ public Collection<PreloadedData> preload(Gadget gadget) {
+ Collection<Callable<PreloadedData>> tasks =
+ preloader.createPreloadTasks(gadget);
return preload(tasks);
}
@@ -68,8 +57,6 @@
processed -= 1;
if (processed == 0) {
// The last preload fires in the current thread.
- // TODO: for the HTML_RENDER phase, if there's also a proxied fetch, this
- // is counter-productive
FutureTask<PreloadedData> futureTask = new FutureTask<PreloadedData>(task);
futureTask.run();
preloads.add(futureTask);
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=762869&r1=762868&r2=762869&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 Apr 7 17:47:57 2009
@@ -54,18 +54,15 @@
this.requestPipeline = requestPipeline;
}
- public Collection<Callable<PreloadedData>> createPreloadTasks(Gadget gadget,
- PreloaderService.PreloadPhase phase) {
+ public Collection<Callable<PreloadedData>> createPreloadTasks(Gadget gadget) {
List<Callable<PreloadedData>> preloads = Lists.newArrayList();
GadgetContext context = gadget.getContext();
- if (phase == PreloaderService.PreloadPhase.HTML_RENDER) {
- for (Preload preload : gadget.getSpec().getModulePrefs().getPreloads()) {
- Set<String> preloadViews = preload.getViews();
- if (preloadViews.isEmpty() || preloadViews.contains(context.getView())) {
- preloads.add(new PreloadTask(context, preload, preload.getHref().toString()));
- }
+ for (Preload preload : gadget.getSpec().getModulePrefs().getPreloads()) {
+ Set<String> preloadViews = preload.getViews();
+ if (preloadViews.isEmpty() || preloadViews.contains(context.getView())) {
+ preloads.add(new PreloadTask(context, preload, preload.getHref().toString()));
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelineExecutor.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelineExecutor.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelineExecutor.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelineExecutor.java Tue Apr 7 17:47:57 2009
@@ -18,15 +18,13 @@
*/
package org.apache.shindig.gadgets.preload;
+import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.expressions.Expressions;
import org.apache.shindig.expressions.RootELResolver;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetELResolver;
import org.apache.shindig.gadgets.spec.PipelinedData;
import org.apache.shindig.gadgets.spec.PipelinedData.Batch;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
import java.util.Collection;
import java.util.List;
@@ -75,16 +73,16 @@
/**
* Results in the form of a full JSON-RPC batch response.
*/
- public final JSONArray results;
+ public final Collection<? extends Object> results;
/**
- * Results in the form of a Map from id to JSONObject.
+ * Results in the form of a Map from id to a JSON-serializable object.
*/
- public final Map<String, JSONObject> keyedResults;
+ public final Map<String, ? extends Object> keyedResults;
public Results(Collection<PipelinedData> remainingPipelines,
- JSONArray results,
- Map<String, JSONObject> keyedResults) {
+ Collection<? extends Object> results,
+ Map<String, ? extends Object> keyedResults) {
this.remainingPipelines = remainingPipelines;
this.results = results;
this.keyedResults = keyedResults;
@@ -98,8 +96,8 @@
* @return results from the pipeline, or null if there are no results
*/
public Results execute(GadgetContext context, Collection<PipelinedData> pipelines) {
- JSONArray results = new JSONArray();
- Map<String, JSONObject> elResults = Maps.newHashMap();
+ List<Object> results = Lists.newArrayList();
+ Map<String, Object> elResults = Maps.newHashMap();
CompositeELResolver rootObjects = new CompositeELResolver();
rootObjects.add(new GadgetELResolver(context));
rootObjects.add(new RootELResolver(elResults));
@@ -127,19 +125,23 @@
for (PreloadedData preloaded : preloads) {
try {
for (Object entry : preloaded.toJson()) {
- JSONObject obj = (JSONObject) entry;
- results.put(obj);
- if (obj.has("data")) {
- elResults.put(obj.getString("id"), obj.getJSONObject("data"));
- } else if (obj.has("error")) {
- elResults.put(obj.getString("id"), obj.getJSONObject("error"));
+ results.add(entry);
+
+ String id = (String) JsonSerializer.getProperty(entry, "id");
+
+ Object data = JsonSerializer.getProperty(entry, "data");
+ if (data != null) {
+ elResults.put(id, data);
+ } else {
+ Object error = JsonSerializer.getProperty(entry, "error");
+ if (error != null) {
+ elResults.put(id, error);
+ }
}
}
} catch (PreloadException pe) {
// This will be thrown in the event of some unexpected exception. We can move on.
logger.log(Level.WARNING, "Unexpected error when preloading", pe);
- } catch (JSONException je) {
- throw new RuntimeException(je);
}
}
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=762869&r1=762868&r2=762869&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 Apr 7 17:47:57 2009
@@ -18,6 +18,8 @@
*/
package org.apache.shindig.gadgets.preload;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.uri.UriBuilder;
import org.apache.shindig.config.ContainerConfig;
@@ -72,12 +74,8 @@
// Load any social preloads into a JSONArray for delivery to
// JsonRpcServlet
if (!batch.getSocialPreloads().isEmpty()) {
- JSONArray array = new JSONArray();
- for (Object socialRequest : batch.getSocialPreloads().values()) {
- array.put(socialRequest);
- }
-
- Callable<PreloadedData> preloader = new SocialPreloadTask(context, array);
+ Callable<PreloadedData> preloader = new SocialPreloadTask(context,
+ batch.getSocialPreloads().values());
preloadList.add(preloader);
}
@@ -111,21 +109,23 @@
private class SocialPreloadTask implements Callable<PreloadedData> {
private final GadgetContext context;
- private final JSONArray array;
+ private final Collection<? extends Object> socialRequests;
- public SocialPreloadTask(GadgetContext context, JSONArray array) {
+ public SocialPreloadTask(GadgetContext context, Collection<? extends Object> socialRequests) {
this.context = context;
- this.array = array;
+ this.socialRequests = socialRequests;
}
public PreloadedData call() throws Exception {
Uri uri = getSocialUri(context);
+
+ String socialRequestsJson = JsonSerializer.serialize(socialRequests);
HttpRequest request = new HttpRequest(uri)
.setIgnoreCache(context.getIgnoreCache())
.setSecurityToken(context.getToken())
.setMethod("POST")
.setAuthType(AuthType.NONE)
- .setPostBody(UTF8.encode(array.toString()).array())
+ .setPostBody(UTF8.encode(socialRequestsJson).array())
.addHeader("Content-Type", "application/json; charset=UTF-8")
.setContainer(context.getContainer())
.setGadget(context.getUrl());
@@ -133,14 +133,18 @@
HttpResponse response = executeSocialRequest(request);
// Unpack the response into a list of PreloadedData responses
- final List<Object> data = Lists.newArrayList();
- // TODO: if the entire request fails, the result is an object,
- // not an array
- JSONArray array = new JSONArray(response.getResponseAsString());
- for (int i = 0; i < array.length(); i++) {
- data.add(array.getJSONObject(i));
+ String responseText;
+ if (response.getHttpStatusCode() < 400) {
+ responseText = response.getResponseAsString();
+ } else {
+ // For error responses, unpack into the same error format used
+ // for os:HttpRequest
+ responseText = JsonSerializer.serialize(
+ createJsonError(response.getHttpStatusCode(), null, response));
}
+ final List<Object> data = parseSocialResponse(socialRequests, responseText);
+
return new PreloadedData() {
public Collection<Object> toJson() {
return data;
@@ -149,7 +153,36 @@
}
}
- // A task for preloading os:MakeRequest
+ /**
+ * Parse the response from a social request into a list of response objects
+ */
+ static List<Object> parseSocialResponse(Collection<? extends Object> requests,
+ String response) throws JSONException {
+ // Unpack the response into a list of PreloadedData responses
+ final List<Object> data = Lists.newArrayList();
+
+ if (response.startsWith("[")) {
+ // A non-error response is a JSON array
+ JSONArray array = new JSONArray(response);
+ for (int i = 0; i < array.length(); i++) {
+ data.add(array.get(i));
+ }
+ } else {
+ // But a global failure is a JSON object. Per spec requirements, copy
+ // the overall error into per-id errors
+ JSONObject error = new JSONObject(response);
+ for (Object request : requests) {
+ JSONObject itemResponse = new JSONObject();
+ itemResponse.put("error", error);
+ itemResponse.put("id", JsonSerializer.getProperty(request, "id"));
+ data.add(itemResponse);
+ }
+ }
+
+ return data;
+ }
+
+ /** A task for loading os:HttpRequest */
class HttpPreloadTask implements Callable<PreloadedData> {
private final GadgetContext context;
private final RequestAuthenticationInfo preload;
@@ -196,8 +229,7 @@
return new Data(requestPipeline.execute(request));
}
- // TODO: is this format correct?
- // TODO: change HttpPreloader to use this format?
+ // TODO: change HttpPreloader to use this format
class Data implements PreloadedData {
private final JSONObject data;
@@ -208,7 +240,7 @@
try {
wrapper.put("id", key);
if (response.getHttpStatusCode() >= 400) {
- wrapper.put("error", createJSONError(response.getHttpStatusCode(), null, response));
+ wrapper.put("error", createJsonError(response.getHttpStatusCode(), null, response));
} else {
// Create {data: {status: [CODE], content: {...}|[...]|"...", headers:{...}}}
JSONObject data = new JSONObject();
@@ -219,7 +251,7 @@
String responseText = response.getResponseAsString();
// Add allowed headers
- JSONObject headers = createJSONHeaders(response);
+ JSONObject headers = createJsonHeaders(response);
if (headers != null) {
data.put("headers", headers);
}
@@ -235,7 +267,7 @@
} catch (JSONException je) {
// JSON parse failed: create a 406 error, and remove the "data" section
wrapper.remove("data");
- wrapper.put("error", createJSONError(
+ wrapper.put("error", createJsonError(
HttpResponse.SC_NOT_ACCEPTABLE, je.getMessage(), response));
}
} else {
@@ -255,7 +287,7 @@
}
}
- private static JSONObject createJSONHeaders(HttpResponse response)
+ private static JSONObject createJsonHeaders(HttpResponse response)
throws JSONException {
JSONObject headers = null;
@@ -282,7 +314,7 @@
/**
* Create {error: { code: [CODE], data: {content: "....", headers: {...}}}}
*/
- private static JSONObject createJSONError(int code, String message, HttpResponse response)
+ private static JSONObject createJsonError(int code, String message, HttpResponse response)
throws JSONException {
JSONObject error = new JSONObject();
error.put("code", code);
@@ -291,15 +323,21 @@
}
JSONObject data = new JSONObject();
- error.put("data", data);
- data.put("content", response.getResponseAsString());
+ String responseText = response.getResponseAsString();
+ if (StringUtils.isNotEmpty(responseText)) {
+ data.put("content", responseText);
+ }
// Add allowed headers
- JSONObject headers = createJSONHeaders(response);
+ JSONObject headers = createJsonHeaders(response);
if (headers != null) {
data.put("headers", headers);
}
+ if (data.length() > 0) {
+ error.put("data", data);
+ }
+
return error;
}
@@ -309,7 +347,6 @@
UriBuilder builder = UriBuilder.parse(
jsonUri.replace("%host%", context.getHost()))
- //TODO: bogus? find correct way.
.addQueryParameter("st", context.getParameter("st"));
return builder.toUri();
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloadModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloadModule.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloadModule.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloadModule.java Tue Apr 7 17:47:57 2009
@@ -18,13 +18,7 @@
*/
package org.apache.shindig.gadgets.preload;
-import java.util.List;
-
-import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.TypeLiteral;
/**
* Guice bindings for the render package.
@@ -32,19 +26,5 @@
public class PreloadModule extends AbstractModule {
@Override
protected void configure() {
- bind(new TypeLiteral<List<Preloader>>(){}).toProvider(PreloaderProvider.class);
- }
-
- private static class PreloaderProvider implements Provider<List<Preloader>> {
- private final List<Preloader> preloaders;
-
- @Inject
- public PreloaderProvider(HttpPreloader httpPreloader) {
- preloaders = ImmutableList.of((Preloader) httpPreloader);
- }
-
- public List<Preloader> get() {
- return preloaders;
- }
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/Preloader.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/Preloader.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/Preloader.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/Preloader.java Tue Apr 7 17:47:57 2009
@@ -22,21 +22,19 @@
import java.util.Collection;
import java.util.concurrent.Callable;
+import com.google.inject.ImplementedBy;
+
/**
* Performs an individual preloading operation.
*/
+@ImplementedBy(HttpPreloader.class)
public interface Preloader {
/**
* Create new preload tasks for the provided gadget.
- * TODO: instead of requiring each Preloader to check the preload phase,
- * register a different list of preloaders for each phase. Guice
- * MultimapBinder would come in handy here.
*
* @param gadget The gadget that the operations will be performed for.
- * @param phase The preload phase being executed.
* @return Preloading tasks that will be executed by
* {@link PreloaderService#}.
*/
- Collection<Callable<PreloadedData>> createPreloadTasks(Gadget gadget,
- PreloaderService.PreloadPhase phase);
+ Collection<Callable<PreloadedData>> createPreloadTasks(Gadget gadget);
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java Tue Apr 7 17:47:57 2009
@@ -31,27 +31,12 @@
@ImplementedBy(ConcurrentPreloaderService.class)
public interface PreloaderService {
/**
- * Phases for preloading.
- */
- public enum PreloadPhase {
- /**
- * Preloaded content that will be POSTed to a proxied render.
- */
- PROXY_FETCH,
-
- /**
- * Preloaded content that will be delivered to the final render
- */
- HTML_RENDER
- }
-
- /**
* Begin all preload operations.
*
* @param gadget The gadget that the operations will be performed for.
* @return The preloads for the gadget.
*/
- Collection<PreloadedData> preload(Gadget gadget, PreloadPhase phase);
+ Collection<PreloadedData> preload(Gadget gadget);
/**
* Execute preloads with a specific set of preload tasks.
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java Tue Apr 7 17:47:57 2009
@@ -71,8 +71,7 @@
View view = gadget.getCurrentView();
// We always execute these preloads, they have nothing to do with the cache output.
- Collection<PreloadedData> preloads = preloader.preload(gadget,
- PreloaderService.PreloadPhase.HTML_RENDER);
+ Collection<PreloadedData> preloads = preloader.preload(gadget);
gadget.setPreloads(preloads);
String content;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java Tue Apr 7 17:47:57 2009
@@ -127,7 +127,7 @@
PipelineExecutor.Results results =
pipelineExecutor.execute(gadget.getContext(), ImmutableList.of(data));
- if (results != null && results.results.length() != 0) {
+ if (results != null && !results.results.isEmpty()) {
String postContent = JsonSerializer.serialize(results.results);
// POST the preloaded content, with a method override of GET
// to enable caching
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java Tue Apr 7 17:47:57 2009
@@ -17,18 +17,16 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import com.google.common.collect.Maps;
-
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.HtmlSerializer;
-import org.json.JSONObject;
-
import org.w3c.dom.Document;
import java.util.Map;
+import com.google.common.collect.Maps;
+
/**
* Object that maintains a String representation of arbitrary contents
* and a consistent view of those contents as an HTML parse tree.
@@ -38,7 +36,7 @@
private HttpResponse contentSource;
private Document document;
private final GadgetHtmlParser contentParser;
- private final Map<String, JSONObject> pipelinedData;
+ private final Map<String, Object> pipelinedData;
private static final String MUTABLE_CONTENT_LISTENER = "MutableContentListener";
@@ -150,11 +148,11 @@
return (document != null);
}
- public void addPipelinedData(String key, JSONObject value) {
+ public void addPipelinedData(String key, Object value) {
pipelinedData.put(key, value);
}
- public Map<String, JSONObject> getPipelinedData() {
+ public Map<String, Object> getPipelinedData() {
return pipelinedData;
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java Tue Apr 7 17:47:57 2009
@@ -26,7 +26,6 @@
import org.apache.shindig.gadgets.preload.PipelineExecutor;
import org.apache.shindig.gadgets.spec.PipelinedData;
import org.apache.shindig.gadgets.spec.SpecParserException;
-import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -115,7 +114,7 @@
pipelineScript.setAttribute("type", "text/javascript");
StringBuilder script = new StringBuilder();
- for (Map.Entry<String, JSONObject> entry : results.keyedResults.entrySet()) {
+ for (Map.Entry<String, ? extends Object> entry : results.keyedResults.entrySet()) {
String key = entry.getKey();
// TODO: escape key
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java Tue Apr 7 17:47:57 2009
@@ -32,7 +32,6 @@
import org.apache.shindig.gadgets.templates.TemplateBasedTagHandler;
import org.apache.shindig.gadgets.templates.TemplateContext;
import org.apache.shindig.gadgets.templates.TemplateProcessor;
-import org.json.JSONObject;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
@@ -161,7 +160,7 @@
private RewriterResults processInlineTemplates(Gadget gadget, MutableContent content,
List<Element> allTemplates, TagRegistry registry) throws GadgetException {
- Map<String, JSONObject> pipelinedData = content.getPipelinedData();
+ Map<String, Object> pipelinedData = content.getPipelinedData();
// If true, client-side processing will be needed
boolean needsFeature = false;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateContext.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateContext.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateContext.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateContext.java Tue Apr 7 17:47:57 2009
@@ -18,10 +18,7 @@
*/
package org.apache.shindig.gadgets.templates;
-import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.Gadget;
-
-import org.json.JSONObject;
import org.w3c.dom.Node;
import java.util.Map;
@@ -32,7 +29,7 @@
* Context for processing a single template.
*/
public class TemplateContext {
- private final Map<String, JSONObject> top;
+ private final Map<String, ? extends Object> top;
private final Gadget gadget;
private Object cur = null;
@@ -41,7 +38,7 @@
private Map<String, Object> myMap = null;
private Node templateRoot;
- public TemplateContext(Gadget gadget, Map<String, JSONObject> top) {
+ public TemplateContext(Gadget gadget, Map<String, ? extends Object> top) {
this.gadget = gadget;
this.top = top;
this.cur = top;
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java Tue Apr 7 17:47:57 2009
@@ -26,7 +26,6 @@
import org.apache.shindig.gadgets.Gadget;
import org.junit.Test;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -50,7 +49,6 @@
= ImmutableMap.of("foo", "bar", "baz", "blah");
private final TestPreloader preloader = new TestPreloader();
- private final TestPreloader preloader2 = new TestPreloader();
@Test
public void preloadSingleService() throws Exception {
@@ -58,10 +56,9 @@
new DataPreload(PRELOAD_STRING_KEY, PRELOAD_STRING_VALUE)));
PreloaderService service = new ConcurrentPreloaderService(new TestExecutorService(),
- Arrays.<Preloader>asList(preloader));
+ preloader);
- Collection<PreloadedData> preloads = service.preload(
- null, PreloaderService.PreloadPhase.HTML_RENDER);
+ Collection<PreloadedData> preloads = service.preload((Gadget) null);
Collection<Object> preloaded = getAll(preloads);
assertEquals(ImmutableMap.of(PRELOAD_STRING_KEY, PRELOAD_STRING_VALUE),
@@ -86,14 +83,14 @@
preloader.tasks.add(new TestPreloadCallable(
new DataPreload(PRELOAD_NUMERIC_KEY, PRELOAD_NUMERIC_VALUE)));
- preloader2.tasks.add(new TestPreloadCallable(
+ preloader.tasks.add(new TestPreloadCallable(
new DataPreload(PRELOAD_MAP_KEY, PRELOAD_MAP_VALUE)));
PreloaderService service = new ConcurrentPreloaderService(new TestExecutorService(),
- Arrays.<Preloader>asList(preloader, preloader2));
+ preloader);
Collection<PreloadedData> preloads =
- service.preload(null, PreloaderService.PreloadPhase.HTML_RENDER);
+ service.preload((Gadget) null);
Collection<Object> preloaded = getAll(preloads);
assertEquals(ImmutableList.<Object>of(
@@ -116,9 +113,9 @@
preloader.tasks.add(third);
PreloaderService service = new ConcurrentPreloaderService(Executors.newFixedThreadPool(5),
- Arrays.<Preloader>asList(preloader));
+ preloader);
- service.preload(null, PreloaderService.PreloadPhase.HTML_RENDER);
+ service.preload((Gadget) null);
TestPreloadCallable ranInSameThread = null;
for (TestPreloadCallable preloadCallable: Lists.newArrayList(first, second, third)) {
@@ -141,9 +138,9 @@
preloader.tasks.add(callable);
PreloaderService service = new ConcurrentPreloaderService(Executors.newCachedThreadPool(),
- Arrays.<Preloader>asList(preloader));
+ preloader);
- service.preload(null, PreloaderService.PreloadPhase.HTML_RENDER);
+ service.preload((Gadget) null);
assertSame("Single request not run in current thread",
Thread.currentThread(), callable.executedThread);
@@ -156,8 +153,7 @@
}
public Collection<Callable<PreloadedData>> createPreloadTasks(
- Gadget gadget, PreloaderService.PreloadPhase phase) {
- assertEquals(PreloaderService.PreloadPhase.HTML_RENDER, phase);
+ Gadget gadget) {
return tasks;
}
}
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=762869&r1=762868&r2=762869&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 Tue Apr 7 17:47:57 2009
@@ -98,7 +98,7 @@
.setSpec(spec)
.setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
Collection<Callable<PreloadedData>> preloaded =
- preloader.createPreloadTasks(gadget, PreloaderService.PreloadPhase.HTML_RENDER);
+ preloader.createPreloadTasks(gadget);
assertEquals(1, preloaded.size());
PreloadedData data = preloaded.iterator().next().call();
@@ -121,7 +121,7 @@
.setSpec(spec)
.setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
Collection<Callable<PreloadedData>> preloaded =
- preloader.createPreloadTasks(gadget, PreloaderService.PreloadPhase.HTML_RENDER);
+ preloader.createPreloadTasks(gadget);
assertEquals(1, preloaded.size());
PreloadedData data = preloaded.iterator().next().call();
@@ -148,7 +148,7 @@
.setSpec(spec)
.setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
Collection<Callable<PreloadedData>> preloaded = preloader.createPreloadTasks(
- gadget, PreloaderService.PreloadPhase.HTML_RENDER);
+ gadget);
assertEquals(1, preloaded.size());
PreloadedData data = preloaded.iterator().next().call();
@@ -173,7 +173,7 @@
.setSpec(spec)
.setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
Collection<Callable<PreloadedData>> preloaded = preloader.createPreloadTasks(
- gadget, PreloaderService.PreloadPhase.HTML_RENDER);
+ gadget);
assertEquals(2, preloaded.size());
List<Object> list = getAll(preloaded);
@@ -213,7 +213,7 @@
.setSpec(spec)
.setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
Collection<Callable<PreloadedData>> preloaded
- = preloader.createPreloadTasks(gadget, PreloaderService.PreloadPhase.HTML_RENDER);
+ = preloader.createPreloadTasks(gadget);
List<Object> list = getAll(preloaded);
assertEquals(1, list.size());
@@ -221,25 +221,6 @@
checkResults((JSONObject) list.get(0));
}
- @Test
- public void proxiedPreloadIsEmpty() throws Exception {
- String xml =
- "<Module><ModulePrefs title=''>" +
- " <Preload href='" + PRELOAD_HREF + "'/>" +
- "</ModulePrefs><Content/></Module>";
- GadgetSpec spec = new GadgetSpec(GADGET_URL, xml);
- Preloader preloader = new HttpPreloader(requestPipeline);
-
- Gadget gadget = new Gadget()
- .setContext(context)
- .setSpec(spec)
- .setCurrentView(spec.getView(GadgetSpec.DEFAULT_VIEW));
- Collection<Callable<PreloadedData>> preloaded =
- preloader.createPreloadTasks(gadget, PreloaderService.PreloadPhase.PROXY_FETCH);
-
- assertEquals(0, preloaded.size());
- }
-
private static class RecordingHttpFetcher implements HttpFetcher {
protected final List<HttpRequest> requests = Lists.newArrayList();
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java Tue Apr 7 17:47:57 2009
@@ -29,6 +29,7 @@
import static org.junit.Assert.assertTrue;
import org.apache.shindig.common.JsonAssert;
+import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.xml.XmlUtil;
import org.apache.shindig.expressions.Expressions;
@@ -40,7 +41,6 @@
import org.easymock.IArgumentMatcher;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
-import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
@@ -124,11 +124,10 @@
assertTrue(batchCapture.getValue().getSocialPreloads().containsKey("me"));
assertTrue(batchCapture.getValue().getHttpPreloads().containsKey("json"));
- JSONArray expectedArray = new JSONArray(
- "[{id: 'key', data: {foo: 'bar'}}]");
-
- JsonAssert.assertJsonArrayEquals(expectedArray, results.results);
- JsonAssert.assertJsonObjectEquals(expectedData.getJSONObject("data"), results.keyedResults.get("key"));
+ JsonAssert.assertJsonEquals("[{id: 'key', data: {foo: 'bar'}}]",
+ JsonSerializer.serialize(results.results));
+ JsonAssert.assertJsonEquals("{foo: 'bar'}",
+ JsonSerializer.serialize(results.keyedResults.get("key")));
assertTrue(results.remainingPipelines.isEmpty());
control.verify();
@@ -177,10 +176,9 @@
PipelineExecutor.Results results = executor.execute(context,
ImmutableList.of(pipeline));
- JSONArray expectedArray = new JSONArray(
- "[{id: 'json', data: {user: 'canonical'}}," +
- "{id: 'me', data: {id: 'canonical'}}]");
- JsonAssert.assertJsonArrayEquals(expectedArray, results.results);
+ JsonAssert.assertJsonEquals("[{id: 'json', data: {user: 'canonical'}}," +
+ "{id: 'me', data: {id: 'canonical'}}]",
+ JsonSerializer.serialize(results.results));
assertEquals(ImmutableSet.of("json", "me"), results.keyedResults.keySet());
assertTrue(results.remainingPipelines.isEmpty());
@@ -210,7 +208,7 @@
PipelineExecutor.Results results = executor.execute(context,
ImmutableList.of(pipeline));
- assertEquals(0, results.results.length());
+ assertEquals(0, results.results.size());
assertTrue(results.keyedResults.isEmpty());
assertEquals(1, results.remainingPipelines.size());
assertSame(pipeline, results.remainingPipelines.iterator().next());
@@ -244,11 +242,10 @@
assertTrue(batchCapture.getValue().getSocialPreloads().containsKey("me"));
assertTrue(batchCapture.getValue().getHttpPreloads().containsKey("json"));
- JSONArray expectedArray = new JSONArray(
- "[{id: 'key', error: {message: 'NO!', code: 500}}]");
-
- JsonAssert.assertJsonArrayEquals(expectedArray, results.results);
- JsonAssert.assertJsonObjectEquals(expectedData.getJSONObject("error"), results.keyedResults.get("key"));
+ JsonAssert.assertJsonEquals("[{id: 'key', error: {message: 'NO!', code: 500}}]",
+ JsonSerializer.serialize(results.results));
+ JsonAssert.assertJsonEquals("{message: 'NO!', code: 500}",
+ JsonSerializer.serialize(results.keyedResults.get("key")));
assertTrue(results.remainingPipelines.isEmpty());
control.verify();
@@ -278,7 +275,7 @@
ImmutableList.of(pipeline));
// The exception is fully handled, and leads to empty results
- assertEquals(0, results.results.length());
+ assertEquals(0, results.results.size());
assertTrue(results.keyedResults.isEmpty());
assertTrue(results.remainingPipelines.isEmpty());
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=762869&r1=762868&r2=762869&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 Apr 7 17:47:57 2009
@@ -150,6 +150,72 @@
assertTrue(request.getContentType().startsWith("application/json"));
}
+ @Test
+ public void testSocialPreloadWithBatchError() throws Exception {
+ GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+ String socialResult = "{code: 401, message: 'unauthorized'}";
+ RecordingRequestPipeline pipeline = new RecordingRequestPipeline(socialResult);
+ PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline, containerConfig);
+
+ view = "profile";
+ contextParams.put("st", "token");
+
+ Gadget gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec)
+ .setCurrentView(spec.getView("profile"));
+
+ PipelinedData.Batch batch = getBatch(gadget);
+ Collection<Callable<PreloadedData>> tasks = preloader.createPreloadTasks(
+ context, batch);
+ assertEquals(1, tasks.size());
+ // Nothing fetched yet
+ assertEquals(0, pipeline.requests.size());
+
+ Collection<Object> result = tasks.iterator().next().call().toJson();
+ assertEquals(2, result.size());
+
+ JSONObject resultWithKeyP = new JSONObject("{id: 'p', error: {code: 401, message: 'unauthorized'}}");
+ JSONObject resultWithKeyA = new JSONObject("{id: 'a', error: {code: 401, message: 'unauthorized'}}");
+ Iterator<Object> iter = result.iterator();
+ JsonAssert.assertJsonEquals(resultWithKeyA.toString(), iter.next().toString());
+ JsonAssert.assertJsonEquals(resultWithKeyP.toString(), iter.next().toString());
+ }
+
+ @Test
+ public void testSocialPreloadWithHttpError() throws Exception {
+ GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+ HttpResponse httpError = new HttpResponseBuilder()
+ .setHttpStatusCode(HttpResponse.SC_INTERNAL_SERVER_ERROR)
+ .create();
+ RecordingRequestPipeline pipeline = new RecordingRequestPipeline(httpError);
+ PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline, containerConfig);
+
+ view = "profile";
+ contextParams.put("st", "token");
+
+ Gadget gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec)
+ .setCurrentView(spec.getView("profile"));
+
+ PipelinedData.Batch batch = getBatch(gadget);
+ Collection<Callable<PreloadedData>> tasks = preloader.createPreloadTasks(
+ context, batch);
+
+ Collection<Object> result = tasks.iterator().next().call().toJson();
+ assertEquals(2, result.size());
+
+ JSONObject resultWithKeyP = new JSONObject("{id: 'p', error: {code: 500}}");
+ JSONObject resultWithKeyA = new JSONObject("{id: 'a', error: {code: 500}}");
+ Iterator<Object> iter = result.iterator();
+ JsonAssert.assertJsonEquals(resultWithKeyA.toString(), iter.next().toString());
+ JsonAssert.assertJsonEquals(resultWithKeyP.toString(), iter.next().toString());
+ }
+
+
private Batch getBatch(Gadget gadget) {
return gadget.getCurrentView().getPipelinedData().getBatch(expressions,
new GadgetELResolver(gadget.getContext()));
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java Tue Apr 7 17:47:57 2009
@@ -128,7 +128,7 @@
protected FakePreloaderService() {
}
- public Collection<PreloadedData> preload(Gadget gadget, PreloadPhase phase) {
+ public Collection<PreloadedData> preload(Gadget gadget) {
wasPreloaded = true;
return preloads;
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java?rev=762869&r1=762868&r2=762869&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/ProxyRendererTest.java Tue Apr 7 17:47:57 2009
@@ -24,6 +24,7 @@
import org.apache.shindig.auth.AnonymousSecurityToken;
import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.JsonAssert;
+import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.uri.UriBuilder;
import org.apache.shindig.common.xml.XmlUtil;
@@ -38,14 +39,16 @@
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.PipelinedData;
import org.apache.shindig.gadgets.spec.View;
-import org.json.JSONArray;
+import org.json.JSONObject;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
/**
@@ -196,7 +199,8 @@
@Test
public void renderProxiedWithPreload() throws Exception {
- JSONArray prefetchedJson = new JSONArray("[{id: 'foo', data: 'bar'}]");
+ List<JSONObject> prefetchedJson = ImmutableList.of(new JSONObject("{id: 'foo', data: 'bar'}"));
+
pipelineExecutor.results = new PipelineExecutor.Results(null, prefetchedJson, null);
pipeline.plainResponses.put(EXPECTED_PROXIED_HTML_HREF, new HttpResponse(PROXIED_HTML_CONTENT));
@@ -209,8 +213,7 @@
assertEquals("application/json;charset=utf-8", lastHttpRequest.getHeader("Content-Type"));
String postBody = lastHttpRequest.getPostBodyAsString();
- JSONArray actualJson = new JSONArray(postBody);
- JsonAssert.assertJsonArrayEquals(prefetchedJson, actualJson);
+ JsonAssert.assertJsonEquals(JsonSerializer.serialize(prefetchedJson), postBody);
assertTrue(pipelineExecutor.wasPreloaded);
}