Author: johnh
Date: Mon Aug 25 19:45:55 2008
New Revision: 688943
URL: http://svn.apache.org/viewvc?rev=688943&view=rev
Log:
Modularization of ContentRewriter functionality.
Rather than a single ContentRewriter being injected into the appropriate code
paths, a ContentRewriterRegistry
is injected instead, enabling a list of ContentRewriters rather than only one.
By default, BasicContentRewriterRegistry is added, whose default constructor
has a (pre-existing) ContentRewriter
instance injected into it, maintaining exact rewriting and execution semantics.
Rewriting code in HttpResponse and HttpRequest has been removed in favor of
method-injection of ContentRewriterRegistry
into AbstractHttpCache, cleaning up code a bit. New test AbstractHttpCacheTest
verifies proper rewriting behavior,
including injection along the way.
Added:
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/ContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractMessageBundleFactory.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpCache.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.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/http/HttpRequestTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractMessageBundleFactory.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractMessageBundleFactory.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractMessageBundleFactory.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractMessageBundleFactory.java
Mon Aug 25 19:45:55 2008
@@ -21,7 +21,6 @@
import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.MessageBundle;
-import java.util.List;
import java.util.Locale;
import java.net.URI;
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
Mon Aug 25 19:45:55 2008
@@ -20,19 +20,18 @@
import org.apache.shindig.common.cache.Cache;
import org.apache.shindig.common.cache.CacheProvider;
-import org.apache.shindig.common.cache.LruCache;
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.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.View;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
-import com.sun.jmx.remote.util.CacheMap;
import java.net.URI;
import java.util.ArrayList;
@@ -53,7 +52,7 @@
private static final Logger logger =
Logger.getLogger(BasicGadgetSpecFactory.class.getName());
private final HttpFetcher fetcher;
- private final ContentRewriter rewriter;
+ private final ContentRewriterRegistry rewriterRegistry;
private final Executor executor;
private final long minTtl;
private final long maxTtl;
@@ -148,8 +147,12 @@
throw new
GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
"Unable to retrieve remote gadget
content.");
}
- if (rewriter != null) {
- v.setRewrittenContent(rewriter.rewriteGadgetView(spec,
v.getContent(), "text/html"));
+ if (rewriterRegistry != null) {
+ String content = v.getContent();
+ for (ContentRewriter rewriter : rewriterRegistry.getRewriters()) {
+ content = rewriter.rewriteGadgetView(spec, content, "text/html");
+ }
+ v.setRewrittenContent(content);
}
}
}
@@ -170,13 +173,13 @@
@Inject
public BasicGadgetSpecFactory(HttpFetcher fetcher,
CacheProvider cacheProvider,
- ContentRewriter rewriter,
+ ContentRewriterRegistry rewriterRegistry,
Executor executor,
@Named("shindig.gadget-spec.cache.capacity")int gadgetSpecCacheCapacity,
@Named("shindig.gadget-spec.cache.minTTL")long
minTtl,
@Named("shindig.gadget-spec.cache.maxTTL")long
maxTtl) {
this.fetcher = fetcher;
- this.rewriter = rewriter;
+ this.rewriterRegistry = rewriterRegistry;
this.executor = executor;
this.cache = cacheProvider.createCache(gadgetSpecCacheCapacity);
this.minTtl = minTtl;
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
Mon Aug 25 19:45:55 2008
@@ -25,7 +25,6 @@
import org.apache.shindig.gadgets.spec.Auth;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.MessageBundle;
import org.apache.shindig.gadgets.spec.Preload;
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
Mon Aug 25 19:45:55 2008
@@ -17,6 +17,11 @@
*/
package org.apache.shindig.gadgets.http;
+import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+
+import com.google.inject.Inject;
+
/**
* Base class for content caches. Defines cache expiration rules and
* and restrictions on allowed content. Also enforces rewriting
@@ -24,6 +29,13 @@
*/
public abstract class AbstractHttpCache implements HttpCache {
+ private ContentRewriterRegistry rewriterRegistry;
+
+ @Inject
+ public void setRewriterRegistry(ContentRewriterRegistry registry) {
+ rewriterRegistry = registry;
+ }
+
public final HttpResponse getResponse(HttpCacheKey key, HttpRequest request)
{
if (key.isCacheable()) {
String keyString = key.toString();
@@ -108,7 +120,7 @@
// Return the rewritten version if requested
if (!request.getIgnoreCache() &&
- request.getContentRewriter() != null &&
+ rewriterRegistry != null &&
response.getRewritten() != null &&
response.getRewritten().getContentLength() > 0) {
return response.getRewritten();
@@ -122,8 +134,15 @@
*/
protected HttpResponse rewrite(HttpRequest request, HttpResponse response) {
// TODO - Make this sensitive to custom rewriting rules
- if (response.getRewritten() == null && request.getContentRewriter() !=
null) {
- return request.getContentRewriter().rewrite(request, response);
+ if (response.getRewritten() == null &&
+ rewriterRegistry != null) {
+ HttpResponse rewritten = response;
+ for (ContentRewriter rewriter : rewriterRegistry.getRewriters()) {
+ rewritten = rewriter.rewrite(request, rewritten);
+ }
+ if (response.getRewritten() != null) {
+ return response;
+ }
}
return null;
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpCache.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpCache.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpCache.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpCache.java
Mon Aug 25 19:45:55 2008
@@ -19,7 +19,6 @@
import org.apache.shindig.common.cache.Cache;
import org.apache.shindig.common.cache.CacheProvider;
-import org.apache.shindig.common.cache.LruCache;
import com.google.inject.Inject;
import com.google.inject.name.Named;
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
Mon Aug 25 19:45:55 2008
@@ -25,7 +25,6 @@
import org.apache.shindig.common.ContainerConfig;
import org.apache.shindig.common.SecurityToken;
import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -64,8 +63,6 @@
private boolean signOwner = true;
private boolean signViewer = true;
- // TODO: Remove this when new rewriting infrastructure is in place.
- private ContentRewriter contentRewriter;
private String rewriteMimeType;
/**
@@ -90,7 +87,6 @@
securityToken = request.securityToken;
signOwner = request.signOwner;
signViewer = request.signViewer;
- contentRewriter = request.contentRewriter;
rewriteMimeType = request.rewriteMimeType;
}
@@ -241,15 +237,6 @@
}
/**
- * @param contentRewriter The rewriter to use for the object retrieved by
this request.
- * TODO: Move this to new rewriting facility.
- */
- public HttpRequest setContentRewriter(ContentRewriter contentRewriter) {
- this.contentRewriter = contentRewriter;
- return this;
- }
-
- /**
* @param rewriteMimeType The assumed content type of the response to be
rewritten. Overrides
* any values set in the Content-Type response header.
*
@@ -391,13 +378,6 @@
}
/**
- * @return The rewriter to be used on any response objects.
- */
- public ContentRewriter getContentRewriter() {
- return contentRewriter;
- }
-
- /**
* @return The content type to assume when rewriting.
*
* TODO: Move this to new rewriting facility.
Added:
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=688943&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
Mon Aug 25 19:45:55 2008
@@ -0,0 +1,53 @@
+/*
+ * 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.rewrite;
+
+import com.google.inject.Inject;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Registry into which is injected a single rewriter, which
+ * bootstraps the rewriters list. This enables modularization
+ * of [EMAIL PROTECTED] ContentRewriter} instances without changing
+ * Guice injection bindings. The class also provides a method
+ * for manipulating a simple list of rewriters.
+ */
+public class BasicContentRewriterRegistry implements ContentRewriterRegistry {
+ private final List<ContentRewriter> rewriters;
+
+ @Inject
+ public BasicContentRewriterRegistry(ContentRewriter firstRewriter) {
+ rewriters = new LinkedList<ContentRewriter>();
+ appendRewriter(firstRewriter);
+ }
+
+ /** [EMAIL PROTECTED] */
+ public List<ContentRewriter> getRewriters() {
+ return Collections.unmodifiableList(rewriters);
+ }
+
+ public void appendRewriter(ContentRewriter rewriter) {
+ if (rewriter != null) {
+ rewriters.add(rewriter);
+ }
+ }
+
+}
Added:
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=688943&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
Mon Aug 25 19:45:55 2008
@@ -0,0 +1,30 @@
+/*
+ * 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.rewrite;
+
+import com.google.inject.ImplementedBy;
+
+import java.util.List;
+
[EMAIL PROTECTED](BasicContentRewriterRegistry.class)
+public interface ContentRewriterRegistry {
+ /**
+ * @return An immutable list of all content rewriters
+ */
+ public List<ContentRewriter> getRewriters();
+}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
Mon Aug 25 19:45:55 2008
@@ -30,7 +30,6 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.shindig.gadgets.spec.Auth;
import org.apache.shindig.gadgets.spec.Preload;
@@ -42,7 +41,6 @@
import java.io.IOException;
import java.util.Collections;
-import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -71,15 +69,12 @@
private final SecurityTokenDecoder securityTokenDecoder;
private final ContentFetcherFactory contentFetcherFactory;
- private final ContentRewriter rewriter;
@Inject
public MakeRequestHandler(ContentFetcherFactory contentFetcherFactory,
- SecurityTokenDecoder securityTokenDecoder,
- ContentRewriter rewriter) {
+ SecurityTokenDecoder securityTokenDecoder) {
this.contentFetcherFactory = contentFetcherFactory;
this.securityTokenDecoder = securityTokenDecoder;
- this.rewriter = rewriter;
}
/**
@@ -128,9 +123,6 @@
}
Uri url = validateUrl(request.getParameter(URL_PARAM));
- String method = request.getMethod();
- Map<String, List<String>> headers = null;
- byte[] postBody = null;
HttpRequest req = new HttpRequest(url)
.setMethod(getParameter(request, METHOD_PARAM, "GET"))
@@ -163,7 +155,6 @@
if (request.getParameter(GADGET_PARAM) != null) {
req.setGadget(Uri.parse(request.getParameter(GADGET_PARAM)));
}
- req.setContentRewriter(rewriter);
// Allow the rewriter to use an externally forced mime type. This is needed
// allows proper rewriting of <script src="x"/> where x is returned with
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
Mon Aug 25 19:45:55 2008
@@ -55,7 +55,6 @@
// This is a limitation of Guice, but this workaround...works.
private final HttpFetcher fetcher;
private final LockedDomainService lockedDomainService;
- private final ContentRewriter rewriter;
@Inject
public ProxyHandler(HttpFetcher fetcher,
@@ -63,7 +62,6 @@
ContentRewriter rewriter) {
this.fetcher = fetcher;
this.lockedDomainService = lockedDomainService;
- this.rewriter = rewriter;
}
/**
@@ -79,8 +77,6 @@
req.setGadget(Uri.parse(request.getParameter(GADGET_PARAM)));
}
- req.setContentRewriter(rewriter);
-
// Allow the rewriter to use an externally forced mime type. This is needed
// allows proper rewriting of <script src="x"/> where x is returned with
// a content type like text/html which unfortunately happens all too often
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
Mon Aug 25 19:45:55 2008
@@ -23,7 +23,6 @@
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
-import java.net.URI;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
Mon Aug 25 19:45:55 2008
@@ -26,6 +26,8 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.easymock.EasyMock;
import static org.easymock.EasyMock.expect;
@@ -86,11 +88,13 @@
private final HttpFetcher fetcher =
EasyMock.createNiceMock(HttpFetcher.class);
private final CaptureRewriter rewriter = new CaptureRewriter();
+ private final ContentRewriterRegistry rewriterRegistry =
+ new BasicContentRewriterRegistry(rewriter);
private final CacheProvider cacheProvider = new DefaultCacheProvider();
private final BasicGadgetSpecFactory specFactory
- = new BasicGadgetSpecFactory(fetcher, cacheProvider, rewriter,
FAKE_EXECUTOR, 5, -1000, 1000);
+ = new BasicGadgetSpecFactory(fetcher, cacheProvider, rewriterRegistry,
FAKE_EXECUTOR, 5, -1000, 1000);
@Test
public void specFetched() throws Exception {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java
Mon Aug 25 19:45:55 2008
@@ -20,13 +20,11 @@
import org.apache.shindig.common.cache.CacheProvider;
import org.apache.shindig.common.cache.DefaultCacheProvider;
-import org.apache.shindig.common.xml.XmlUtil;
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.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.MessageBundle;
import org.easymock.EasyMock;
import static org.easymock.EasyMock.expect;
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=688943&r1=688942&r2=688943&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 Aug 25 19:45:55 2008
@@ -27,6 +27,7 @@
import org.apache.shindig.gadgets.http.ContentFetcherFactory;
import org.apache.shindig.gadgets.http.HttpFetcher;
import org.apache.shindig.gadgets.oauth.OAuthFetcher;
+import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.shindig.gadgets.rewrite.NoOpContentRewriter;
import org.apache.shindig.gadgets.servlet.GadgetRenderingTask;
@@ -72,7 +73,7 @@
}
};
public final GadgetSpecFactory specFactory = new BasicGadgetSpecFactory(
- fetcher, cacheProvider, new NoOpContentRewriter(), executor, 0, 0L, 0L);
+ fetcher, cacheProvider, new BasicContentRewriterRegistry(null),
executor, 0, 0L, 0L);
public GadgetTestFixture() {
Added:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java?rev=688943&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
Mon Aug 25 19:45:55 2008
@@ -0,0 +1,106 @@
+/*
+ * 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.http;
+
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.replay;
+import org.easymock.classextension.EasyMock;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+import junit.framework.TestCase;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Sanity test to ensure that Guice injection of a default
+ * ContentRewriter leads to its use by an AbstractHttpCache
+ * in properly rewriting cacheable content.
+ */
+public class AbstractHttpCacheTest extends TestCase {
+ private Injector injector;
+
+ protected void setUp() throws Exception {
+ injector = Guice.createInjector(new TestCacheModule());
+ }
+
+ public void testCacheWithRewritingOps() {
+ // Setup: could move this elsewhere, but no real need right now.
+ HttpCacheKey key = EasyMock.createNiceMock(HttpCacheKey.class);
+ expect(key.isCacheable()).andReturn(true).anyTimes();
+ HttpRequest request = EasyMock.createNiceMock(HttpRequest.class);
+ expect(request.getIgnoreCache()).andReturn(false).anyTimes();
+ replay(key, request);
+ HttpResponse response = new HttpResponseBuilder().setHttpStatusCode(200)
+
.setResponse("foo".getBytes()).setExpirationTime(Integer.MAX_VALUE).create();
+
+ // Actual test.
+ AbstractHttpCache ahc = injector.getInstance(TestHttpCache.class);
+ HttpResponse rewritten = ahc.addResponse(key, request, response);
+ assertNotSame(rewritten, response);
+ assertEquals(PFX_STR + "foo", rewritten.getResponseAsString());
+ assertSame(rewritten, ahc.getResponse(key, request));
+ assertSame(response, ahc.removeResponse(key));
+ }
+
+ private static class TestHttpCache extends AbstractHttpCache {
+ private final Map<String, HttpResponse> map;
+
+ public TestHttpCache() {
+ super();
+ map = new HashMap<String, HttpResponse>();
+ }
+
+ public void addResponseImpl(String key, HttpResponse response) {
+ map.put(key, response);
+ }
+
+ public HttpResponse getResponseImpl(String key) {
+ return map.get(key);
+ }
+
+ public HttpResponse removeResponseImpl(String key) {
+ return map.remove(key);
+ }
+
+ }
+
+ private static String PFX_STR = "--prefixtest--";
+ private static class TestContentRewriter implements ContentRewriter {
+ public String rewriteGadgetView(GadgetSpec spec, String content, String
mime) {
+ return PFX_STR + content;
+ }
+
+ public HttpResponse rewrite(HttpRequest req, HttpResponse resp) {
+ return new
HttpResponseBuilder().setHttpStatusCode(resp.getHttpStatusCode())
+ .setResponse((PFX_STR +
resp.getResponseAsString()).getBytes()).create();
+ }
+ }
+
+ private static class TestCacheModule extends AbstractModule {
+ protected void configure() {
+ bind(ContentRewriter.class).to(TestContentRewriter.class);
+ }
+ }
+}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
Mon Aug 25 19:45:55 2008
@@ -90,7 +90,6 @@
.setGadget(DEFAULT_URI)
.setMethod("POST")
.setPostBody(POST_BODY.getBytes())
- .setContentRewriter(null)
.setRewriteMimeType("text/fake")
.setSecurityToken(AnonymousSecurityToken.getInstance())
.setSignOwner(false)
@@ -104,7 +103,6 @@
assertEquals(request.getGadget(), request2.getGadget());
assertEquals(request.getMethod(), request2.getMethod());
assertEquals(request.getPostBodyAsString(),
request2.getPostBodyAsString());
- assertEquals(request.getContentRewriter(), request2.getContentRewriter());
assertEquals(request.getRewriteMimeType(), request2.getRewriteMimeType());
assertEquals(request.getSecurityToken(), request2.getSecurityToken());
assertEquals(request.getSignOwner(), request2.getSignOwner());
Added:
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=688943&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
Mon Aug 25 19:45:55 2008
@@ -0,0 +1,50 @@
+/*
+ * 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.rewrite;
+
+import junit.framework.TestCase;
+
+public class BasicContentRewriterRegistryTest extends TestCase {
+ public void testNoArgsCreatedBasicRegistry() {
+ BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(null);
+ assertNotNull(r.getRewriters());
+ assertEquals(0, r.getRewriters().size());
+ }
+
+ public void testSingleValuedBasicRegistry() {
+ BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(
+ new NoOpContentRewriter());
+ assertNotNull(r.getRewriters());
+ assertEquals(1, r.getRewriters().size());
+ assertTrue(r.getRewriters().get(0) instanceof NoOpContentRewriter);
+ }
+
+ public void testBasicContentRegistryWithAdds() {
+ ContentRewriter cr0 = new NoOpContentRewriter();
+ BasicContentRewriterRegistry r = new BasicContentRewriterRegistry(cr0);
+ ContentRewriter cr1 = new NoOpContentRewriter();
+ ContentRewriter cr2 = new NoOpContentRewriter();
+ r.appendRewriter(cr1);
+ r.appendRewriter(cr2);
+ assertNotNull(r.getRewriters());
+ assertEquals(3, r.getRewriters().size());
+ assertSame(cr0, r.getRewriters().get(0));
+ assertSame(cr1, r.getRewriters().get(1));
+ assertSame(cr2, r.getRewriters().get(2));
+ }
+}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
Mon Aug 25 19:45:55 2008
@@ -52,7 +52,7 @@
private static final SecurityToken DUMMY_TOKEN = new FakeGadgetToken();
private final MakeRequestHandler handler = new
MakeRequestHandler(contentFetcherFactory,
- securityTokenDecoder, rewriter);
+ securityTokenDecoder);
private void expectGetAndReturnBody(String response) throws Exception {
expectGetAndReturnBody(fetcher, response);
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java?rev=688943&r1=688942&r2=688943&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
Mon Aug 25 19:45:55 2008
@@ -48,7 +48,7 @@
private final MakeRequestServlet servlet = new MakeRequestServlet();
private final MakeRequestHandler handler = new
MakeRequestHandler(contentFetcherFactory,
- securityTokenDecoder, rewriter);
+ securityTokenDecoder);
private final HttpRequest internalRequest = new HttpRequest(REQUEST_URL);
private final HttpResponse internalResponse = new
HttpResponse(RESPONSE_BODY);