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")