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;