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


Reply via email to