Author: etnu
Date: Sat Aug 30 13:35:17 2008
New Revision: 690578
URL: http://svn.apache.org/viewvc?rev=690578&view=rev
Log:
More work for SHINDIG-523.
This patch introduces a new construct for holding the state of the actively
processing gadget. This will replace Gadget.java when the code path migration
is complete.
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessedGadget.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Renderer.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/Preloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PreloaderService.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/RendererTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/ConcurrentPreloaderServiceTest.java
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessedGadget.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessedGadget.java?rev=690578&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessedGadget.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessedGadget.java
Sat Aug 30 13:35:17 2008
@@ -0,0 +1,69 @@
+/*
+ * 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.preload.Preloads;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+
+/**
+ * Intermediary representation of all state associated with processing
+ * of a single gadget request.
+ *
+ * TODO: Fully replace the Gadget class with ProcessedGadget.
+ */
+public class ProcessedGadget {
+ private GadgetContext context;
+ private GadgetSpec spec;
+ private Preloads preloads;
+
+ /**
+ * @param context The request that the gadget is being processed for.
+ */
+ public ProcessedGadget setContext(GadgetContext context) {
+ this.context = context;
+ return this;
+ }
+
+ public GadgetContext getContext() {
+ return context;
+ }
+
+ /**
+ * @param spec The spec for the gadget that is being processed.
+ */
+ public ProcessedGadget setSpec(GadgetSpec spec) {
+ this.spec = spec;
+ return this;
+ }
+
+ public GadgetSpec getSpec() {
+ return spec;
+ }
+
+ /**
+ * @param preloads The preloads for the gadget that is being processed.
+ */
+ public ProcessedGadget setPreloads(Preloads preloads) {
+ this.preloads = preloads;
+ return this;
+ }
+
+ public Preloads getPreloads() {
+ return preloads;
+ }
+}
\ No newline at end of file
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Renderer.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Renderer.java?rev=690578&r1=690577&r2=690578&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Renderer.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Renderer.java
Sat Aug 30 13:35:17 2008
@@ -22,6 +22,7 @@
import org.apache.shindig.gadgets.http.HttpFetcher;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.preload.PreloaderService;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.View;
@@ -33,12 +34,15 @@
public class Renderer {
private final GadgetSpecFactory gadgetSpecFactory;
private final HttpFetcher httpFetcher;
+ private final PreloaderService preloader;
@Inject
public Renderer(GadgetSpecFactory gadgetSpecFactory,
- HttpFetcher httpFetcher) {
+ HttpFetcher httpFetcher,
+ PreloaderService preloader) {
this.gadgetSpecFactory = gadgetSpecFactory;
this.httpFetcher = httpFetcher;
+ this.preloader = preloader;
}
/**
@@ -57,11 +61,20 @@
public String render(GadgetContext context) throws RenderingException {
try {
GadgetSpec spec = gadgetSpecFactory.getGadgetSpec(context);
+
+ ProcessedGadget gadget = new ProcessedGadget()
+ .setContext(context)
+ .setSpec(spec);
+
+ // TODO: Move Gadget.getView into a utility method so that the correct
view can be pulled from
+ // the gadget with aliasing done automatically.
View view = spec.getView(context.getView());
if (view.getType() == View.ContentType.URL) {
throw new RenderingException("Attempted to render a url-type gadget.");
}
+ gadget.setPreloads(preloader.preload(context, spec));
+
// TODO: Add current url to GadgetContext to support transitive proxying.
if (view.getHref() == null) {
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=690578&r1=690577&r2=690578&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
Sat Aug 30 13:35:17 2008
@@ -17,9 +17,10 @@
*/
package org.apache.shindig.gadgets.preload;
-import com.google.inject.Inject;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.apache.shindig.gadgets.Gadget;
+import com.google.inject.Inject;
import java.util.List;
import java.util.Map;
@@ -41,10 +42,10 @@
this.preloaders = preloaders;
}
- public Preloads preload(Gadget gadget) {
+ public Preloads preload(GadgetContext context, GadgetSpec gadget) {
ConcurrentPreloads preloads = new ConcurrentPreloads();
for (Preloader preloader : preloaders) {
- Map<String, Callable<PreloadedData>> tasks =
preloader.createPreloadTasks(gadget);
+ Map<String, Callable<PreloadedData>> tasks =
preloader.createPreloadTasks(context, gadget);
for (Map.Entry<String, Callable<PreloadedData>> entry :
tasks.entrySet()) {
preloads.add(entry.getKey(), executor.submit(entry.getValue()));
}
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=690578&r1=690577&r2=690578&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
Sat Aug 30 13:35:17 2008
@@ -17,7 +17,8 @@
*/
package org.apache.shindig.gadgets.preload;
-import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
import java.util.Map;
import java.util.concurrent.Callable;
@@ -29,9 +30,10 @@
/**
* Create new preload tasks for the provided gadget.
*
+ * @param context The request that needs preloading.
* @param gadget The gadget that the operations will be performed for.
* @return Preloading tasks that will be executed by
- * [EMAIL PROTECTED] PreloaderService#preload(Gadget)}.
+ * [EMAIL PROTECTED] PreloaderService#preload(GadgetContext, GadgetSpec)}.
*/
- Map<String, Callable<PreloadedData>> createPreloadTasks(Gadget gadget);
+ Map<String, Callable<PreloadedData>> createPreloadTasks(GadgetContext
context, GadgetSpec 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=690578&r1=690577&r2=690578&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
Sat Aug 30 13:35:17 2008
@@ -17,9 +17,10 @@
*/
package org.apache.shindig.gadgets.preload;
-import com.google.inject.ImplementedBy;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.apache.shindig.gadgets.Gadget;
+import com.google.inject.ImplementedBy;
/**
* Handles preloading operations, such as HTTP fetches, social data retrieval,
or anything else that
@@ -30,8 +31,11 @@
/**
* Begin all preload operations.
*
- * @param gadget The gadget to perform preloading for.
+ * @param context The request that needs preloading.
+ * @param gadget The gadget that the operations will be performed for.
* @return The preloads for the gadget.
+ *
+ * TODO: This should probably have a read only input. If we can
*/
- Preloads preload(Gadget gadget);
+ Preloads preload(GadgetContext context, GadgetSpec gadget);
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/RendererTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/RendererTest.java?rev=690578&r1=690577&r2=690578&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/RendererTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/RendererTest.java
Sat Aug 30 13:35:17 2008
@@ -19,11 +19,14 @@
package org.apache.shindig.gadgets;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.http.HttpFetcher;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.preload.PreloaderService;
+import org.apache.shindig.gadgets.preload.Preloads;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import com.google.common.collect.Maps;
@@ -49,9 +52,10 @@
" <Content view='url' type='url'
href='http://example.org/always/an/error.html'/>" +
"</Module>";
+ private final FakeGadgetSpecFactory specFactory = new
FakeGadgetSpecFactory();
private final FakeHttpFetcher httpFetcher = new FakeHttpFetcher();
-
- private final Renderer renderer = new Renderer(new FakeGadgetSpecFactory(),
httpFetcher);
+ private final FakePreloaderService preloaderService = new
FakePreloaderService();
+ private final Renderer renderer = new Renderer(specFactory, httpFetcher,
preloaderService);
private GadgetContext makeContext(final String view, final Uri specUrl) {
return new GadgetContext() {
@@ -87,7 +91,13 @@
@Test(expected = RenderingException.class)
public void renderInvalidUrl() throws RenderingException {
- renderer.render(makeContext("url", Uri.parse("doesnotexist")));
+ renderer.render(makeContext("url", Uri.parse("doesnotexist")));
+ }
+
+ @Test
+ public void doPreloading() throws Exception {
+ renderer.render(makeContext("html", SPEC_URL));
+ assertTrue("Preloading not performed.", preloaderService.wasPreloaded);
}
private static class FakeGadgetSpecFactory implements GadgetSpecFactory {
@@ -112,4 +122,12 @@
return response;
}
}
+
+ private static class FakePreloaderService implements PreloaderService {
+ private boolean wasPreloaded;
+ public Preloads preload(GadgetContext context, GadgetSpec gadget) {
+ wasPreloaded = true;
+ return null;
+ }
+ }
}
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=690578&r1=690577&r2=690578&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
Sat Aug 30 13:35:17 2008
@@ -20,7 +20,8 @@
import static org.junit.Assert.assertEquals;
import org.apache.shindig.common.testing.TestExecutorService;
-import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
import com.google.common.collect.Maps;
@@ -53,7 +54,8 @@
PreloaderService service
= new ConcurrentPreloaderService(new TestExecutorService(),
Arrays.asList(preloader));
- assertEquals(PRELOAD_STRING_VALUE,
service.preload(null).getData(PRELOAD_STRING_KEY).toJson());
+ assertEquals(PRELOAD_STRING_VALUE,
+ service.preload(null,
null).getData(PRELOAD_STRING_KEY).toJson());
}
@Test
@@ -70,7 +72,7 @@
PreloaderService service = new ConcurrentPreloaderService(new
TestExecutorService(),
Arrays.asList(preloader, preloader2));
- Preloads preloads = service.preload(null);
+ Preloads preloads = service.preload(null, null);
assertEquals(PRELOAD_STRING_VALUE,
preloads.getData(PRELOAD_STRING_KEY).toJson());
assertEquals(PRELOAD_NUMERIC_VALUE,
preloads.getData(PRELOAD_NUMERIC_KEY).toJson());
@@ -82,13 +84,14 @@
preloader.tasks.put(PRELOAD_STRING_KEY, new TestPreloadCallable(null));
PreloaderService service
= new ConcurrentPreloaderService(new TestExecutorService(),
Arrays.asList(preloader));
- service.preload(null).getData(PRELOAD_STRING_KEY);
+ service.preload(null, null).getData(PRELOAD_STRING_KEY);
}
private static class TestPreloader implements Preloader {
private final Map<String, Callable<PreloadedData>> tasks =
Maps.newHashMap();
- public Map<String, Callable<PreloadedData>> createPreloadTasks(Gadget
gadget) {
+ public Map<String, Callable<PreloadedData>> createPreloadTasks(
+ GadgetContext context, GadgetSpec spec) {
return tasks;
}
}