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;
     }
   }


Reply via email to