You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by jo...@apache.org on 2008/09/09 00:24:06 UTC

svn commit: r693301 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/ test/java/org/apache/shindig/gadgets/ test/java/org/apache/shindig/gadgets/rewrite/

Author: johnh
Date: Mon Sep  8 15:24:03 2008
New Revision: 693301

URL: http://svn.apache.org/viewvc?rev=693301&view=rev
Log:
Adding HttpResponse rewriting API to ContentRewriterRegistry, with corollary changes to ContentRewriterRegistry impls.

This CL resolves SHINDIG-578.


Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java Mon Sep  8 15:24:03 2008
@@ -25,6 +25,11 @@
 
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.MutableContent;
+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.parse.GadgetHtmlParser;
 
 /**
  * Registry into which is injected a single rewriter, which
@@ -35,10 +40,13 @@
  */
 public class BasicContentRewriterRegistry implements ContentRewriterRegistry {
   private final List<ContentRewriter> rewriters;
+  private final GadgetHtmlParser htmlParser;
   
   @Inject
-  public BasicContentRewriterRegistry(ContentRewriter firstRewriter) {
-    rewriters = new LinkedList<ContentRewriter>();
+  public BasicContentRewriterRegistry(ContentRewriter firstRewriter,
+      GadgetHtmlParser htmlParser) {
+    this.rewriters = new LinkedList<ContentRewriter>();
+    this.htmlParser = htmlParser;
     appendRewriter(firstRewriter);
   }
   
@@ -68,5 +76,23 @@
     
     return !originalContent.equals(gadget.getContent());
   }
+  
+  /** {@inheritDoc} */
+  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) {
+    MutableContent mc = new MutableContent(htmlParser);
+    String originalContent = resp.getResponseAsString();
+    mc.setContent(originalContent);
+    
+    for (ContentRewriter rewriter : getRewriters()) {
+      rewriter.rewrite(req, resp, mc);
+    }
+    
+    String rewrittenContent = mc.getContent();
+    if (rewrittenContent.equals(originalContent)) {
+      return resp;
+    }
+    
+    return new HttpResponseBuilder(resp).setResponseString(rewrittenContent).create();
+  }
 
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java Mon Sep  8 15:24:03 2008
@@ -24,6 +24,9 @@
 import org.apache.shindig.gadgets.CachingWebRetrievalFactory;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
 import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.ContentRewriter;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
@@ -45,6 +48,7 @@
   
   @Inject
   public CachingContentRewriterRegistry(ContentRewriter firstRewriter,
+      GadgetHtmlParser htmlParser,
       CacheProvider cacheProvider,
       @Named("shindig.gadget-spec.cache.capacity")int capacity,
       @Named("shindig.gadget-spec.cache.minTTL")long minTtl,
@@ -54,7 +58,7 @@
     // caching is set up for specs, it's set up for rewritten content as well)
     // TODO: create separate rewritten-content config values.
     super(cacheProvider, capacity, minTtl, maxTtl);
-    baseRegistry = new BasicContentRewriterRegistry(firstRewriter);
+    baseRegistry = new BasicContentRewriterRegistry(firstRewriter, htmlParser);
   }
 
   @Override
@@ -97,6 +101,7 @@
   public boolean rewriteGadget(Gadget gadget)
       throws GadgetException {
     String cached = doCachedFetch(gadget, gadget.getContext().getIgnoreCache());
+    
     // At present, the output of rewriting is just the string contained within
     // the Gadget object. Thus, a successful cache hit results in copying over the
     // rewritten value to the input gadget object.
@@ -106,9 +111,15 @@
       gadget.setContent(cached);
       return true;
     }
+    
     return baseRegistry.rewriteGadget(gadget);
   }
   
+  /** {@inheritDoc} */
+  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) {
+    return baseRegistry.rewriteHttpResponse(req, resp);
+  }
+  
   public void appendRewriter(ContentRewriter rewriter) {
     baseRegistry.appendRewriter(rewriter);
   }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java Mon Sep  8 15:24:03 2008
@@ -23,6 +23,8 @@
 
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
 
 @ImplementedBy(BasicContentRewriterRegistry.class)
 public interface ContentRewriterRegistry {
@@ -38,4 +40,13 @@
    * @throws GadgetException Potentially passed through from rewriters
    */
   public boolean rewriteGadget(Gadget gadget) throws GadgetException;
+  
+  /**
+   * Rewrites an {@code HttpResponse} object with the given request as context,
+   * using the registered rewriters.
+   * @param req Request object for context.
+   * @param resp Original response object.
+   * @return Rewritten response object, or resp if not modified.
+   */
+  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp);
 }

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java Mon Sep  8 15:24:03 2008
@@ -58,7 +58,7 @@
     try {
       registry = new GadgetFeatureRegistry(null, fetcher);
       gadgetServer = new GadgetServer(executor, registry, blacklist,
-          containerConfig, new BasicContentRewriterRegistry(rewriter),
+          containerConfig, new BasicContentRewriterRegistry(rewriter, null),
           null, fetcherFactory, specFactory, bundleFactory);
     } catch (Exception e) {
       throw new RuntimeException(e);

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java Mon Sep  8 15:24:03 2008
@@ -23,6 +23,9 @@
 
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
+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.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.View;
 
@@ -30,14 +33,14 @@
 
 public class BasicContentRewriterRegistryTest extends TestCase {
   public void testNoArgsCreatedBasicRegistry() {
-    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(null);
+    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(null, null);
     assertNotNull(r.getRewriters());
     assertEquals(0, r.getRewriters().size());
   }
   
   public void testSingleValuedBasicRegistry() {
     BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(
-        new NoOpContentRewriter());
+        new NoOpContentRewriter(), null);
     assertNotNull(r.getRewriters());
     assertEquals(1, r.getRewriters().size());
     assertTrue(r.getRewriters().get(0) instanceof NoOpContentRewriter);
@@ -45,7 +48,7 @@
   
   public void testBasicContentRegistryWithAdds() {
     ContentRewriter cr0 = new NoOpContentRewriter();
-    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(cr0);
+    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(cr0, null);
     ContentRewriter cr1 = new NoOpContentRewriter();
     ContentRewriter cr2 = new NoOpContentRewriter();
     r.appendRewriter(cr1);
@@ -57,8 +60,8 @@
     assertSame(cr2, r.getRewriters().get(2));
   }
   
-  public void testRunGadgetRewrites() throws Exception {
-    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(null);
+  public void testRunGadgetAndHttpResponseRewrites() throws Exception {
+    BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(null, null);
     StringBuilder appendFull = new StringBuilder();
     for (int i = 0; i < 3; ++i) {
       String appendNew = "-" + i;
@@ -82,5 +85,13 @@
     assertEquals(inputContent, gadget.getContent());
     assertTrue(r.rewriteGadget(gadget));
     assertEquals(rewrittenContent, gadget.getContent());
+    
+    HttpResponse resp = new HttpResponseBuilder().setResponseString(inputContent).create();
+    assertEquals(inputContent, resp.getResponseAsString());
+    HttpRequest req = EasyMock.createNiceMock(HttpRequest.class);  // use mock to be lazy
+    HttpResponse rewritten = r.rewriteHttpResponse(req, resp);
+    assertNotSame(resp, rewritten);
+    assertEquals(rewrittenContent, rewritten.getResponseAsString());
   }
+  
 }

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java?rev=693301&r1=693300&r2=693301&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java Mon Sep  8 15:24:03 2008
@@ -40,7 +40,7 @@
     // yet expired. To ensure no expiry, set expiration date
     // to the largest possible date.
     CachingContentRewriterRegistry r = new CachingContentRewriterRegistry(null,
-        new DefaultCacheProvider(), 100, 0, Integer.MAX_VALUE);
+        null, new DefaultCacheProvider(), 100, 0, Integer.MAX_VALUE);
     StringBuilder appendFull = new StringBuilder();
     for (int i = 0; i < 3; ++i) {
       String appendNew = "-" + i;