You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by ga...@apache.org on 2011/03/15 13:57:02 UTC

svn commit: r1081754 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java

Author: gagan
Date: Tue Mar 15 12:57:02 2011
New Revision: 1081754

URL: http://svn.apache.org/viewvc?rev=1081754&view=rev
Log:
Patch by nikhilmadan23 | Issue 4295051: Copy gadget and container in CacheEnforcementVisitor | http://codereview.appspot.com/4295051/

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java?rev=1081754&r1=1081753&r2=1081754&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitor.java Tue Mar 15 12:57:02 2011
@@ -23,11 +23,13 @@ import com.google.common.collect.Immutab
 import org.apache.shindig.common.Pair;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpCache;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.RequestPipeline;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -75,19 +77,37 @@ public class CacheEnforcementVisitor ext
     this.requestPipeline = requestPipeline;
   }
 
+  /**
+   * Constructs a new HttpRequest in the context of the gadget.
+   * For example, the implementation may choose to copy User Agent or referer etc.
+   */
+  protected HttpRequest createNewHttpRequest(Gadget gadget, String uriStr) {
+    HttpRequest request = new HttpRequest(Uri.parse(uriStr));
+    if (gadget != null) {
+      GadgetSpec spec = gadget.getSpec();
+      if (spec != null) {
+        request.setGadget(spec.getUrl());
+      }
+      GadgetContext context = gadget.getContext();
+      if (context != null) {
+        request.setContainer(context.getContainer());
+      }
+    }
+    return request;
+  }
+
   @Override
   public VisitStatus visit(Gadget gadget, Node node) throws RewritingException {
     if (super.visit(gadget, node).equals(VisitStatus.RESERVE_NODE)) {
       Element element = (Element) node;
       String nodeName = node.getNodeName().toLowerCase();
       String uriStr = element.getAttribute(resourceTags.get(nodeName)).trim();
-      // TODO: Construct other attributes of the HttpRequest using the passed in
-      // gadget.
-      HttpResponse response = cache.getResponse(new HttpRequest(Uri.parse(uriStr)));
+      HttpRequest request = createNewHttpRequest(gadget, uriStr);
+      HttpResponse response = cache.getResponse(request);
       if (response == null) {
-        return handleResponseNotInCache(uriStr);
+        return handleResponseNotInCache(request);
       } else {
-        return handleResponseInCache(uriStr, response);
+        return handleResponseInCache(request, response);
       }
     }
     return VisitStatus.BYPASS;
@@ -96,11 +116,11 @@ public class CacheEnforcementVisitor ext
   /**
    * The action to be performed if the response is in cache.
    *
-   * @param uri The uri of the node.
+   * @param request HttpRequest to fetch the resource of the node.
    * @param response The HttpResponse retrieved from cache.
    * @return The visit status of the node.
    */
-  protected VisitStatus handleResponseInCache(String uri, HttpResponse response) {
+  protected VisitStatus handleResponseInCache(HttpRequest request, HttpResponse response) {
     if (response.shouldRefetch()) {
       // Reserve the node if the response should be refetched.
       if (response.getCacheControlMaxAge() != 0) {
@@ -113,7 +133,7 @@ public class CacheEnforcementVisitor ext
         // since the response might not be usable by the time the actual request comes in. Also
         // we should consider the cases with no max-age, but instead an Expires header which is
         // close to, or the same as the Date header.
-        triggerFetch(uri);        
+        triggerFetch(request);
       }
       return VisitStatus.RESERVE_NODE;
     } else if (response.isStrictNoCache() || response.getHeader("Set-Cookie") != null ||
@@ -133,28 +153,28 @@ public class CacheEnforcementVisitor ext
   /**
    * The action to be performed if the response is not in cache.
    *
-   * @param uri The uri of the node.
+   * @param request HttpRequest to fetch the resource of the node.
    * @return The visit status of the node.
    */
-  protected VisitStatus handleResponseNotInCache(String uri) {
-    triggerFetch(uri);
+  protected VisitStatus handleResponseNotInCache(HttpRequest request) {
+    triggerFetch(request);
     return VisitStatus.RESERVE_NODE;
   }
 
   /**
    * Triggers a background fetch for a resource.
    *
-   * @param uri The uri
+   * @param request HttpRequest to fetch the resource of the node.
    */
-  protected void triggerFetch(final String uri) {
+  protected void triggerFetch(final HttpRequest request) {
 
     executor.execute(new Runnable() {
 
       public void run() {
         try {
-          requestPipeline.execute(new HttpRequest(Uri.parse(uri)));
+          requestPipeline.execute(request);
         } catch (GadgetException e) {
-          logger.log(Level.WARNING, "Triggered fetch failed for " + uri, e);
+          logger.log(Level.WARNING, "Triggered fetch failed for " + request, e);
         }
       }
     });

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java?rev=1081754&r1=1081753&r2=1081754&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CacheEnforcementVisitorTest.java Tue Mar 15 12:57:02 2011
@@ -29,12 +29,15 @@ import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.MoreExecutors;
 
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.AbstractHttpCache;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.parse.ParseModule.DOMImplementationProvider;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.junit.Before;
 import org.junit.Test;
 import org.w3c.dom.Attr;
@@ -55,6 +58,8 @@ public class CacheEnforcementVisitorTest
   private static final Map<String, String> ALL_RESOURCES =
       CacheEnforcementVisitor.Tags.ALL_RESOURCES.getResourceTags();
   private static final String IMG_URL = "http://www.example.org/1.gif";
+  private static final String CONTAINER = "test_container";
+  private static final String GADGET = "http://www.test.com";
 
   @Before
   public void setUp() {
@@ -66,6 +71,29 @@ public class CacheEnforcementVisitorTest
   }
 
   @Test
+  public void testCreateNewHttpRequest() throws Exception {
+    Gadget gadget = createMock(Gadget.class);
+    Uri uri = Uri.parse(GADGET);
+    GadgetSpec gadgetSpec = createMock(GadgetSpec.class);
+    expect(gadgetSpec.getUrl()).andReturn(uri);
+    expect(gadget.getSpec()).andReturn(gadgetSpec);
+    
+    GadgetContext context = createMock(GadgetContext.class);
+    expect(context.getContainer()).andReturn(CONTAINER);
+    expect(gadget.getContext()).andReturn(context);
+
+    replay(gadgetSpec);
+    replay(context);
+    replay(gadget);
+
+    CacheEnforcementVisitor visitor = new CacheEnforcementVisitor(
+        null, null, null, null, CacheEnforcementVisitor.Tags.ALL_RESOURCES);
+    HttpRequest newRequest = visitor.createNewHttpRequest(gadget, IMG_URL);
+    assertEquals(CONTAINER, newRequest.getContainer());
+    assertEquals(uri, newRequest.getGadget());
+  }
+
+  @Test
   public void testStaleImgWithNegativeTtlReservedAndFetchTriggered() throws Exception {
     cache.addResponse(new HttpRequest(Uri.parse(IMG_URL)),
                       new HttpResponseBuilder().setResponseString("test")