You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by Kevin Brown <et...@google.com> on 2008/08/26 07:25:07 UTC

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

The changes to AbstractHttpCache bypass rewriting entirely, spending a lot
of effort to do nothing. You should add some tests to verify that rewriting
is actually performed if you're changing this code.

On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:

> 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 {@code 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);
> +  }
> +
> +  /** {@inheritDoc} */
> +  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;
> +
> +@ImplementedBy(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);
>
>
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
Any thoughts on this? I'm keen to submit a fix ASAP. Thanks!

On Tue, Aug 26, 2008 at 4:07 PM, John Hjelmstad <fa...@google.com> wrote:

> On Tue, Aug 26, 2008 at 3:48 PM, Kevin Brown <et...@google.com> wrote:
>
>> I don't see any reason to change that first test (though, honestly, I'd
>> stop
>> using the mock entirely for HttpRequest here. I'm not really sure why
>> there's a mock being used in the first place).
>
>
> I changed the first test from assertSame to assertEquals because
> addResponse now makes a new HttpResponse object when caching it, so it's not
> actually equivalent.
>
>
>>
>>
>> Changing checkRewrite is an interface change that will break existing
>> implementations without any obvious benefit. I wouldn't change it unless
>> you're going to make functional changes.
>
>
> Reverted... I changed it in my local client to make it clearer in my head
> what it was actually doing.
>
>
>>
>>
>> -        responseBuilder.setCacheTtl(request.getCacheTtl());
>> +        responseBuilder.setCacheTtl(forcedTtl);
>>
>> This change isn't doing anything.
>
>
> True, but it doesn't hurt.
>
>
>>
>>
>> addResponse is now returning the *rewritten* response, instead of the
>> original response object (with rewritten attached). That will lead to many
>> bugs, the most significant of which is that rewriting will be performed on
>> every other request (since you're caching the rewritten content and
>> overwriting the original).
>
>
> I was confused about this myself. In the original implementation,
> addResponse:
> * rewrites the response
> * caches the response with rewritten content attached
> * returns the result of checkRewrite(...), which did:
>   + another rewrite (now removed)
>   + another add of a new response object with rewritten object attached
>   + returned response.getRewritten() if !request.getIgnoreCache()
>
> I just noticed this patch doesn't have the ignoreCache check, so I've added
> that. But aside from that, it appears that the old and the new versions
> return the rewritten response object (while caching the "parent"). But
> admittedly, my head hurts looking at this too long.
>
>
>>
>>
>> This change also causes null to be returned from the cache whenever the
>> rewriter itself is null.
>
>
> How so? If the rewriter is null, then addResponse() will both add and
> return the same object: the base response object. Upon retrieving it, with
> response still usable, checkRewrite(..., cached) is returned.. since
> getRewritten() is null and the rewriter is null in this case, then "cached"
> itself is returned.
>
> --John
>
>
>>
>>
>>
>> On Tue, Aug 26, 2008 at 3:28 PM, John Hjelmstad <fa...@google.com> wrote:
>>
>> > Odd, mail program claims it was attached... perhaps it wasn't sent thru
>> > shindig-dev. I've instead attached the patch to:
>> > https://issues.apache.org/jira/browse/SHINDIG-507
>> >
>> > --John
>> >
>> > On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com> wrote:
>> >
>> > > Attached?
>> > >
>> > > On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com>
>> > wrote:
>> > >
>> > > > Strange.. the test (AbstractHttpCacheTest) either passed or for some
>> > > reason
>> > > > didn't run in my Maven build, so I failed to catch this.
>> > > > In looking to fix this bug, I ran across some double-writing
>> behavior
>> > in
>> > > > AbstractHttpCache. I've fashioned the attached diff in an effort to
>> > > resolve
>> > > > this. Could you, Louis, and anyone else who's interested take a look
>> at
>> > > > this? Behavior now appears to be as intended, without
>> double-rewriting,
>> > > > though I'd really like to ensure I'm not missing whether I'm
>> modifying
>> > > any
>> > > > subtle previous semantics.
>> > > >
>> > > > Thanks,
>> > > > John
>> > > >
>> > > >
>> > > > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com>
>> wrote:
>> > > >
>> > > >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fargo@google.com
>> >
>> > > >> wrote:
>> > > >>
>> > > >> > Hey Kevin:
>> > > >> > I'm a little confused here... the AbstractHttpCache changes
>> simply
>> > sub
>> > > >> in
>> > > >> > ContentRewriterRegistry for the singleton ContentRewriter, and I
>> > added
>> > > a
>> > > >> > test for AbstractHttpCache ensuring precisely what you're asking
>> > for.
>> > > >> (?)
>> > > >>
>> > > >>
>> > > >> This code always returns null:
>> > > >>
>> > > >> */**
>> > > >>   * Rewrite the content
>> > > >>   * @return true if rewritten content was generated
>> > > >>   */*
>> > > >>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
>> > > >> response) {
>> > > >>     *// TODO - Make this sensitive to custom rewriting rules
>> > > >> *    *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*;
>> > > >>   }
>> > > >>
>> > > >>
>> > > >>
>> > > >> >
>> > > >> >
>> > > >> > John
>> > > >> >
>> > > >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com>
>> > > wrote:
>> > > >> >
>> > > >> > > The changes to AbstractHttpCache bypass rewriting entirely,
>> > spending
>> > > a
>> > > >> > lot
>> > > >> > > of effort to do nothing. You should add some tests to verify
>> that
>> > > >> > rewriting
>> > > >> > > is actually performed if you're changing this code.
>> > > >> > >
>> > > >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
>> > > >> > >
>> > > >> > > > 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 {@code 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);
>> > > >> > > > +  }
>> > > >> > > > +
>> > > >> > > > +  /** {@inheritDoc} */
>> > > >> > > > +  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;
>> > > >> > > > +
>> > > >> > > > +@ImplementedBy(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 MakeReq
>>
> ...
>
> [Message clipped]

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Wed, Aug 27, 2008 at 3:42 PM, John Hjelmstad <fa...@google.com> wrote:

> On Wed, Aug 27, 2008 at 2:43 PM, Kevin Brown <et...@google.com> wrote:
>
> > On Tue, Aug 26, 2008 at 4:07 PM, John Hjelmstad <fa...@google.com>
> wrote:
> >
> > > On Tue, Aug 26, 2008 at 3:48 PM, Kevin Brown <et...@google.com> wrote:
> > >
> > > > I don't see any reason to change that first test (though, honestly,
> I'd
> > > > stop
> > > > using the mock entirely for HttpRequest here. I'm not really sure why
> > > > there's a mock being used in the first place).
> > >
> > >
> > > I changed the first test from assertSame to assertEquals because
> > > addResponse
> > > now makes a new HttpResponse object when caching it, so it's not
> actually
> > > equivalent.
> >
> >
> > I was referring to changing setExpirationTime to setCacheTtl, not
> changing
> > assertSame to assertEquals.
>
>
> Aha, that makes sense. I changed to setCacheTtl due to the fact that
> AbstractHttpCache now sets Cache-Control when request.getCacheTtl() != -1.
> As such, I wanted the response object I'm caching to have the same header
> so
> they can be compared using .equals().
>
> Basically I wanted this to test just the rewriter ops in a scenario in
> which
> caching is enabled (rather than testing timeout behavior).
>
> Does that seem reasonable, at least for fixing the current bug? Clearly we
> need to clean up this logic in the future anyway.
>

ok.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Brian Eaton <be...@google.com>.
On Fri, Aug 29, 2008 at 5:13 PM, Kevin Brown <et...@google.com> wrote:
> I agree. I think there's still work to be done in the http pipeline for
> other reasons, but getting this bit straightened out is important for now.
>
> By the way, whatever happened to merging SigningFetcher and OAuthFetcher?

Heh.  It's labor day weekend, so I'll be laboring.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Fri, Aug 29, 2008 at 5:08 PM, Brian Eaton <be...@google.com> wrote:

> On Fri, Aug 29, 2008 at 3:31 PM, Kevin Brown <et...@google.com> wrote:
> >> We need rewriting to plug into both gadgets/makeRequest and
> >> gadgets/ifr, apparently.  Are there other places?  How should we plug
> >> them in?
> >>
> >
> > That's what the rewriting interface is for.
> >
> > There are a couple of other threads going discussing the rewriter.
> >
> > The best place to do rewriting is going to be in the place where we have
> all
> > the needed context for doing it. That means:
> >
> > - In GadgetRenderingTask (soon to be "Renderer"), for rewriting gadgets.
> > - In MakeRequestHandler, for makeRequest.
> > - In ProxyHandler, for the open proxy.
> >
> > The last two might be able to get rolled into ProxyBase, but that's
> unlikely
> > since makeRequest and proxied requests are substantially different.
> >
> > When you're doing the rewriter at the HTTP request level, it requires
> > pulling in a ton of context way down deep into the stack. That doesn't
> work
> > for many reasons.
>
> Ah, I see what you're getting at, and it sounds fine to me.
>
> What I'm mostly interested in is that rewriting stays independent from
> how the data is fetched.  We should be able to rewrite responses in
> the same way no matter whether it was a response to a signed request,
> an OAuth request, or a request sent via carrier pigeon and magic bus.
>
> Note that *caching* is not independent of those variables, however.
> We need different cache policies for different types of requests.


I agree. I think there's still work to be done in the http pipeline for
other reasons, but getting this bit straightened out is important for now.

By the way, whatever happened to merging SigningFetcher and OAuthFetcher?

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Brian Eaton <be...@google.com>.
On Fri, Aug 29, 2008 at 3:31 PM, Kevin Brown <et...@google.com> wrote:
>> We need rewriting to plug into both gadgets/makeRequest and
>> gadgets/ifr, apparently.  Are there other places?  How should we plug
>> them in?
>>
>
> That's what the rewriting interface is for.
>
> There are a couple of other threads going discussing the rewriter.
>
> The best place to do rewriting is going to be in the place where we have all
> the needed context for doing it. That means:
>
> - In GadgetRenderingTask (soon to be "Renderer"), for rewriting gadgets.
> - In MakeRequestHandler, for makeRequest.
> - In ProxyHandler, for the open proxy.
>
> The last two might be able to get rolled into ProxyBase, but that's unlikely
> since makeRequest and proxied requests are substantially different.
>
> When you're doing the rewriter at the HTTP request level, it requires
> pulling in a ton of context way down deep into the stack. That doesn't work
> for many reasons.

Ah, I see what you're getting at, and it sounds fine to me.

What I'm mostly interested in is that rewriting stays independent from
how the data is fetched.  We should be able to rewrite responses in
the same way no matter whether it was a response to a signed request,
an OAuth request, or a request sent via carrier pigeon and magic bus.

Note that *caching* is not independent of those variables, however.
We need different cache policies for different types of requests.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Fri, Aug 29, 2008 at 2:37 PM, Brian Eaton <be...@google.com> wrote:

> On Fri, Aug 29, 2008 at 2:28 PM, Kevin Brown <et...@google.com> wrote:
> > There are many things that need rewriting that don't involve an HTTP
> fetch
> > (how would you model variable substitution or html wrapper appending in a
> > rewriter that is operating on an HttpRequest?)
>
> Shared libraries.  Some code would handle rewriting a GadgetSpec
> object, other code would handle rewriting an HttpResponse, and both
> would rely on the same underlying libraries.


The current rewriter already does exactly what you just described -- the
problem is that it's doing it in the HTTP caching pipeline, where it doesn't
belong.


> > Rewriting should be rewriting, HTTP fetching should be HTTP fetching, and
> > caching should be caching. Trying to make everything look like HTTP
> requests
> > has caused nothing but problems over the last few months, and we should
> not
> > continue down that path.
>
>
> We need rewriting to plug into both gadgets/makeRequest and
> gadgets/ifr, apparently.  Are there other places?  How should we plug
> them in?
>

That's what the rewriting interface is for.

There are a couple of other threads going discussing the rewriter.

The best place to do rewriting is going to be in the place where we have all
the needed context for doing it. That means:

- In GadgetRenderingTask (soon to be "Renderer"), for rewriting gadgets.
- In MakeRequestHandler, for makeRequest.
- In ProxyHandler, for the open proxy.

The last two might be able to get rolled into ProxyBase, but that's unlikely
since makeRequest and proxied requests are substantially different.

When you're doing the rewriter at the HTTP request level, it requires
pulling in a ton of context way down deep into the stack. That doesn't work
for many reasons.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Brian Eaton <be...@google.com>.
On Fri, Aug 29, 2008 at 2:28 PM, Kevin Brown <et...@google.com> wrote:
> There are many things that need rewriting that don't involve an HTTP fetch
> (how would you model variable substitution or html wrapper appending in a
> rewriter that is operating on an HttpRequest?)

Shared libraries.  Some code would handle rewriting a GadgetSpec
object, other code would handle rewriting an HttpResponse, and both
would rely on the same underlying libraries.

> Rewriting should be rewriting, HTTP fetching should be HTTP fetching, and
> caching should be caching. Trying to make everything look like HTTP requests
> has caused nothing but problems over the last few months, and we should not
> continue down that path.

We need rewriting to plug into both gadgets/makeRequest and
gadgets/ifr, apparently.  Are there other places?  How should we plug
them in?

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Fri, Aug 29, 2008 at 1:43 PM, Brian Eaton <be...@google.com> wrote:

> On Wed, Aug 27, 2008 at 5:47 PM, Kevin Brown <et...@google.com> wrote:
> > You're 100% correct (on both the crack and the reasoning behind it).
> Louis
> > had some concern about the potential of two cache reads (not to mention
> > maintaining two types of cache) as well as dealing with the rewriting in
> > more than 1 place initially, but I think at this point it's safe to say
> that
> > the cure was worse than the disease and we should move this to a cleaner
> > model.
>
> Ah, I love consensus!  At the risk of breaking it, I'd like to suggest
> that content rewriting should be implemented as a subclass of
> ChainedContentFetcher.  The chain would be:
>
> Caching -> Rewriting -> Authentication -> Network


There are many things that need rewriting that don't involve an HTTP fetch
(how would you model variable substitution or html wrapper appending in a
rewriter that is operating on an HttpRequest?)

Rewriting should be rewriting, HTTP fetching should be HTTP fetching, and
caching should be caching. Trying to make everything look like HTTP requests
has caused nothing but problems over the last few months, and we should not
continue down that path.


>
>
> The fetchers in the chain would collaborate to build up the cache key,
> probably by exposing the makeCacheKey functions that are all private
> at the moment.  We'd still end up with a single cache read per
> request.
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Brian Eaton <be...@google.com>.
On Wed, Aug 27, 2008 at 5:47 PM, Kevin Brown <et...@google.com> wrote:
> You're 100% correct (on both the crack and the reasoning behind it). Louis
> had some concern about the potential of two cache reads (not to mention
> maintaining two types of cache) as well as dealing with the rewriting in
> more than 1 place initially, but I think at this point it's safe to say that
> the cure was worse than the disease and we should move this to a cleaner
> model.

Ah, I love consensus!  At the risk of breaking it, I'd like to suggest
that content rewriting should be implemented as a subclass of
ChainedContentFetcher.  The chain would be:

Caching -> Rewriting -> Authentication -> Network

The fetchers in the chain would collaborate to build up the cache key,
probably by exposing the makeCacheKey functions that are all private
at the moment.  We'd still end up with a single cache read per
request.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Wed, Aug 27, 2008 at 5:22 PM, Brian Eaton <be...@google.com> wrote:

> On Wed, Aug 27, 2008 at 3:42 PM, John Hjelmstad <fa...@google.com> wrote:
> > Does that seem reasonable, at least for fixing the current bug? Clearly
> we
> > need to clean up this logic in the future anyway.
>
> May I humbly suggest that doing content rewriting in a cache is bound
> to be crack-addled and we should move it elsewhere in the flow?
>
> I think the original reason for putting it there was to keep a single
> cache entry for both original and rewritten content.  Are there other
> reasons it has to be done in the caching class?
>

You're 100% correct (on both the crack and the reasoning behind it). Louis
had some concern about the potential of two cache reads (not to mention
maintaining two types of cache) as well as dealing with the rewriting in
more than 1 place initially, but I think at this point it's safe to say that
the cure was worse than the disease and we should move this to a cleaner
model.

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
My understanding is the same. I'm not aware of any other reason the caching
class should/could do that. I agree that content rewriting should - and will
- be removed from the cache. I submitted this CL simply to un-break
functionality, before a goodly refactoring (working on that shortly).

On Wed, Aug 27, 2008 at 5:22 PM, Brian Eaton <be...@google.com> wrote:

> On Wed, Aug 27, 2008 at 3:42 PM, John Hjelmstad <fa...@google.com> wrote:
> > Does that seem reasonable, at least for fixing the current bug? Clearly
> we
> > need to clean up this logic in the future anyway.
>
> May I humbly suggest that doing content rewriting in a cache is bound
> to be crack-addled and we should move it elsewhere in the flow?
>
> I think the original reason for putting it there was to keep a single
> cache entry for both original and rewritten content.  Are there other
> reasons it has to be done in the caching class?
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Brian Eaton <be...@google.com>.
On Wed, Aug 27, 2008 at 3:42 PM, John Hjelmstad <fa...@google.com> wrote:
> Does that seem reasonable, at least for fixing the current bug? Clearly we
> need to clean up this logic in the future anyway.

May I humbly suggest that doing content rewriting in a cache is bound
to be crack-addled and we should move it elsewhere in the flow?

I think the original reason for putting it there was to keep a single
cache entry for both original and rewritten content.  Are there other
reasons it has to be done in the caching class?

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
On Wed, Aug 27, 2008 at 2:43 PM, Kevin Brown <et...@google.com> wrote:

> On Tue, Aug 26, 2008 at 4:07 PM, John Hjelmstad <fa...@google.com> wrote:
>
> > On Tue, Aug 26, 2008 at 3:48 PM, Kevin Brown <et...@google.com> wrote:
> >
> > > I don't see any reason to change that first test (though, honestly, I'd
> > > stop
> > > using the mock entirely for HttpRequest here. I'm not really sure why
> > > there's a mock being used in the first place).
> >
> >
> > I changed the first test from assertSame to assertEquals because
> > addResponse
> > now makes a new HttpResponse object when caching it, so it's not actually
> > equivalent.
>
>
> I was referring to changing setExpirationTime to setCacheTtl, not changing
> assertSame to assertEquals.


Aha, that makes sense. I changed to setCacheTtl due to the fact that
AbstractHttpCache now sets Cache-Control when request.getCacheTtl() != -1.
As such, I wanted the response object I'm caching to have the same header so
they can be compared using .equals().

Basically I wanted this to test just the rewriter ops in a scenario in which
caching is enabled (rather than testing timeout behavior).

Does that seem reasonable, at least for fixing the current bug? Clearly we
need to clean up this logic in the future anyway.


>
>
>
> > How so? If the rewriter is null, then addResponse() will both add and
> > return
> > the same object: the base response object. Upon retrieving it, with
> > response
> > still usable, checkRewrite(..., cached) is returned.. since
> getRewritten()
> > is null and the rewriter is null in this case, then "cached" itself is
> > returned.
>
>
> ugh, yeah, that code path is more convoluted than most tax codes.
>
>
> >
> >
> > --John
> >
> >
> > >
> > >
> > >
> > > On Tue, Aug 26, 2008 at 3:28 PM, John Hjelmstad <fa...@google.com>
> > wrote:
> > >
> > > > Odd, mail program claims it was attached... perhaps it wasn't sent
> thru
> > > > shindig-dev. I've instead attached the patch to:
> > > > https://issues.apache.org/jira/browse/SHINDIG-507
> > > >
> > > > --John
> > > >
> > > > On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com>
> wrote:
> > > >
> > > > > Attached?
> > > > >
> > > > > On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com>
> > > > wrote:
> > > > >
> > > > > > Strange.. the test (AbstractHttpCacheTest) either passed or for
> > some
> > > > > reason
> > > > > > didn't run in my Maven build, so I failed to catch this.
> > > > > > In looking to fix this bug, I ran across some double-writing
> > behavior
> > > > in
> > > > > > AbstractHttpCache. I've fashioned the attached diff in an effort
> to
> > > > > resolve
> > > > > > this. Could you, Louis, and anyone else who's interested take a
> > look
> > > at
> > > > > > this? Behavior now appears to be as intended, without
> > > double-rewriting,
> > > > > > though I'd really like to ensure I'm not missing whether I'm
> > > modifying
> > > > > any
> > > > > > subtle previous semantics.
> > > > > >
> > > > > > Thanks,
> > > > > > John
> > > > > >
> > > > > >
> > > > > > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com>
> > > wrote:
> > > > > >
> > > > > >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <
> > fargo@google.com>
> > > > > >> wrote:
> > > > > >>
> > > > > >> > Hey Kevin:
> > > > > >> > I'm a little confused here... the AbstractHttpCache changes
> > simply
> > > > sub
> > > > > >> in
> > > > > >> > ContentRewriterRegistry for the singleton ContentRewriter, and
> I
> > > > added
> > > > > a
> > > > > >> > test for AbstractHttpCache ensuring precisely what you're
> asking
> > > > for.
> > > > > >> (?)
> > > > > >>
> > > > > >>
> > > > > >> This code always returns null:
> > > > > >>
> > > > > >> */**
> > > > > >>   * Rewrite the content
> > > > > >>   * @return true if rewritten content was generated
> > > > > >>   */*
> > > > > >>  *protected* HttpResponse rewrite(HttpRequest request,
> > HttpResponse
> > > > > >> response) {
> > > > > >>     *// TODO - Make this sensitive to custom rewriting rules
> > > > > >> *    *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*;
> > > > > >>   }
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> >
> > > > > >> >
> > > > > >> > John
> > > > > >> >
> > > > > >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <
> etnu@google.com>
> > > > > wrote:
> > > > > >> >
> > > > > >> > > The changes to AbstractHttpCache bypass rewriting entirely,
> > > > spending
> > > > > a
> > > > > >> > lot
> > > > > >> > > of effort to do nothing. You should add some tests to verify
> > > that
> > > > > >> > rewriting
> > > > > >> > > is actually performed if you're changing this code.
> > > > > >> > >
> > > > > >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> > > > > >> > >
> > > > > >> > > > 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 {@code 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);
> > > > > >> > > > +  }
> > > > > >> > > > +
> > > > > >> > > > +  /** {@inheritDoc} */
> > > > > >> > > > +  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;
> > > > > >> > > > +
> > > > > >> > > > +@ImplementedBy(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);
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Tue, Aug 26, 2008 at 4:07 PM, John Hjelmstad <fa...@google.com> wrote:

> On Tue, Aug 26, 2008 at 3:48 PM, Kevin Brown <et...@google.com> wrote:
>
> > I don't see any reason to change that first test (though, honestly, I'd
> > stop
> > using the mock entirely for HttpRequest here. I'm not really sure why
> > there's a mock being used in the first place).
>
>
> I changed the first test from assertSame to assertEquals because
> addResponse
> now makes a new HttpResponse object when caching it, so it's not actually
> equivalent.


I was referring to changing setExpirationTime to setCacheTtl, not changing
assertSame to assertEquals.


> How so? If the rewriter is null, then addResponse() will both add and
> return
> the same object: the base response object. Upon retrieving it, with
> response
> still usable, checkRewrite(..., cached) is returned.. since getRewritten()
> is null and the rewriter is null in this case, then "cached" itself is
> returned.


ugh, yeah, that code path is more convoluted than most tax codes.


>
>
> --John
>
>
> >
> >
> >
> > On Tue, Aug 26, 2008 at 3:28 PM, John Hjelmstad <fa...@google.com>
> wrote:
> >
> > > Odd, mail program claims it was attached... perhaps it wasn't sent thru
> > > shindig-dev. I've instead attached the patch to:
> > > https://issues.apache.org/jira/browse/SHINDIG-507
> > >
> > > --John
> > >
> > > On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com> wrote:
> > >
> > > > Attached?
> > > >
> > > > On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com>
> > > wrote:
> > > >
> > > > > Strange.. the test (AbstractHttpCacheTest) either passed or for
> some
> > > > reason
> > > > > didn't run in my Maven build, so I failed to catch this.
> > > > > In looking to fix this bug, I ran across some double-writing
> behavior
> > > in
> > > > > AbstractHttpCache. I've fashioned the attached diff in an effort to
> > > > resolve
> > > > > this. Could you, Louis, and anyone else who's interested take a
> look
> > at
> > > > > this? Behavior now appears to be as intended, without
> > double-rewriting,
> > > > > though I'd really like to ensure I'm not missing whether I'm
> > modifying
> > > > any
> > > > > subtle previous semantics.
> > > > >
> > > > > Thanks,
> > > > > John
> > > > >
> > > > >
> > > > > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com>
> > wrote:
> > > > >
> > > > >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <
> fargo@google.com>
> > > > >> wrote:
> > > > >>
> > > > >> > Hey Kevin:
> > > > >> > I'm a little confused here... the AbstractHttpCache changes
> simply
> > > sub
> > > > >> in
> > > > >> > ContentRewriterRegistry for the singleton ContentRewriter, and I
> > > added
> > > > a
> > > > >> > test for AbstractHttpCache ensuring precisely what you're asking
> > > for.
> > > > >> (?)
> > > > >>
> > > > >>
> > > > >> This code always returns null:
> > > > >>
> > > > >> */**
> > > > >>   * Rewrite the content
> > > > >>   * @return true if rewritten content was generated
> > > > >>   */*
> > > > >>  *protected* HttpResponse rewrite(HttpRequest request,
> HttpResponse
> > > > >> response) {
> > > > >>     *// TODO - Make this sensitive to custom rewriting rules
> > > > >> *    *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*;
> > > > >>   }
> > > > >>
> > > > >>
> > > > >>
> > > > >> >
> > > > >> >
> > > > >> > John
> > > > >> >
> > > > >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com>
> > > > wrote:
> > > > >> >
> > > > >> > > The changes to AbstractHttpCache bypass rewriting entirely,
> > > spending
> > > > a
> > > > >> > lot
> > > > >> > > of effort to do nothing. You should add some tests to verify
> > that
> > > > >> > rewriting
> > > > >> > > is actually performed if you're changing this code.
> > > > >> > >
> > > > >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> > > > >> > >
> > > > >> > > > 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 {@code 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);
> > > > >> > > > +  }
> > > > >> > > > +
> > > > >> > > > +  /** {@inheritDoc} */
> > > > >> > > > +  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;
> > > > >> > > > +
> > > > >> > > > +@ImplementedBy(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);
> > > > >> > > >
> > > > >> > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > > >
> > > > >
> > > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
On Tue, Aug 26, 2008 at 3:48 PM, Kevin Brown <et...@google.com> wrote:

> I don't see any reason to change that first test (though, honestly, I'd
> stop
> using the mock entirely for HttpRequest here. I'm not really sure why
> there's a mock being used in the first place).


I changed the first test from assertSame to assertEquals because addResponse
now makes a new HttpResponse object when caching it, so it's not actually
equivalent.


>
>
> Changing checkRewrite is an interface change that will break existing
> implementations without any obvious benefit. I wouldn't change it unless
> you're going to make functional changes.


Reverted... I changed it in my local client to make it clearer in my head
what it was actually doing.


>
>
> -        responseBuilder.setCacheTtl(request.getCacheTtl());
> +        responseBuilder.setCacheTtl(forcedTtl);
>
> This change isn't doing anything.


True, but it doesn't hurt.


>
>
> addResponse is now returning the *rewritten* response, instead of the
> original response object (with rewritten attached). That will lead to many
> bugs, the most significant of which is that rewriting will be performed on
> every other request (since you're caching the rewritten content and
> overwriting the original).


I was confused about this myself. In the original implementation,
addResponse:
* rewrites the response
* caches the response with rewritten content attached
* returns the result of checkRewrite(...), which did:
  + another rewrite (now removed)
  + another add of a new response object with rewritten object attached
  + returned response.getRewritten() if !request.getIgnoreCache()

I just noticed this patch doesn't have the ignoreCache check, so I've added
that. But aside from that, it appears that the old and the new versions
return the rewritten response object (while caching the "parent"). But
admittedly, my head hurts looking at this too long.


>
>
> This change also causes null to be returned from the cache whenever the
> rewriter itself is null.


How so? If the rewriter is null, then addResponse() will both add and return
the same object: the base response object. Upon retrieving it, with response
still usable, checkRewrite(..., cached) is returned.. since getRewritten()
is null and the rewriter is null in this case, then "cached" itself is
returned.

--John


>
>
>
> On Tue, Aug 26, 2008 at 3:28 PM, John Hjelmstad <fa...@google.com> wrote:
>
> > Odd, mail program claims it was attached... perhaps it wasn't sent thru
> > shindig-dev. I've instead attached the patch to:
> > https://issues.apache.org/jira/browse/SHINDIG-507
> >
> > --John
> >
> > On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com> wrote:
> >
> > > Attached?
> > >
> > > On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com>
> > wrote:
> > >
> > > > Strange.. the test (AbstractHttpCacheTest) either passed or for some
> > > reason
> > > > didn't run in my Maven build, so I failed to catch this.
> > > > In looking to fix this bug, I ran across some double-writing behavior
> > in
> > > > AbstractHttpCache. I've fashioned the attached diff in an effort to
> > > resolve
> > > > this. Could you, Louis, and anyone else who's interested take a look
> at
> > > > this? Behavior now appears to be as intended, without
> double-rewriting,
> > > > though I'd really like to ensure I'm not missing whether I'm
> modifying
> > > any
> > > > subtle previous semantics.
> > > >
> > > > Thanks,
> > > > John
> > > >
> > > >
> > > > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com>
> wrote:
> > > >
> > > >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com>
> > > >> wrote:
> > > >>
> > > >> > Hey Kevin:
> > > >> > I'm a little confused here... the AbstractHttpCache changes simply
> > sub
> > > >> in
> > > >> > ContentRewriterRegistry for the singleton ContentRewriter, and I
> > added
> > > a
> > > >> > test for AbstractHttpCache ensuring precisely what you're asking
> > for.
> > > >> (?)
> > > >>
> > > >>
> > > >> This code always returns null:
> > > >>
> > > >> */**
> > > >>   * Rewrite the content
> > > >>   * @return true if rewritten content was generated
> > > >>   */*
> > > >>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
> > > >> response) {
> > > >>     *// TODO - Make this sensitive to custom rewriting rules
> > > >> *    *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*;
> > > >>   }
> > > >>
> > > >>
> > > >>
> > > >> >
> > > >> >
> > > >> > John
> > > >> >
> > > >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com>
> > > wrote:
> > > >> >
> > > >> > > The changes to AbstractHttpCache bypass rewriting entirely,
> > spending
> > > a
> > > >> > lot
> > > >> > > of effort to do nothing. You should add some tests to verify
> that
> > > >> > rewriting
> > > >> > > is actually performed if you're changing this code.
> > > >> > >
> > > >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> > > >> > >
> > > >> > > > 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 {@code 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);
> > > >> > > > +  }
> > > >> > > > +
> > > >> > > > +  /** {@inheritDoc} */
> > > >> > > > +  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;
> > > >> > > > +
> > > >> > > > +@ImplementedBy(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);
> > > >> > > >
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
I don't see any reason to change that first test (though, honestly, I'd stop
using the mock entirely for HttpRequest here. I'm not really sure why
there's a mock being used in the first place).

Changing checkRewrite is an interface change that will break existing
implementations without any obvious benefit. I wouldn't change it unless
you're going to make functional changes.

-        responseBuilder.setCacheTtl(request.getCacheTtl());
+        responseBuilder.setCacheTtl(forcedTtl);

This change isn't doing anything.

addResponse is now returning the *rewritten* response, instead of the
original response object (with rewritten attached). That will lead to many
bugs, the most significant of which is that rewriting will be performed on
every other request (since you're caching the rewritten content and
overwriting the original).

This change also causes null to be returned from the cache whenever the
rewriter itself is null.


On Tue, Aug 26, 2008 at 3:28 PM, John Hjelmstad <fa...@google.com> wrote:

> Odd, mail program claims it was attached... perhaps it wasn't sent thru
> shindig-dev. I've instead attached the patch to:
> https://issues.apache.org/jira/browse/SHINDIG-507
>
> --John
>
> On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com> wrote:
>
> > Attached?
> >
> > On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com>
> wrote:
> >
> > > Strange.. the test (AbstractHttpCacheTest) either passed or for some
> > reason
> > > didn't run in my Maven build, so I failed to catch this.
> > > In looking to fix this bug, I ran across some double-writing behavior
> in
> > > AbstractHttpCache. I've fashioned the attached diff in an effort to
> > resolve
> > > this. Could you, Louis, and anyone else who's interested take a look at
> > > this? Behavior now appears to be as intended, without double-rewriting,
> > > though I'd really like to ensure I'm not missing whether I'm modifying
> > any
> > > subtle previous semantics.
> > >
> > > Thanks,
> > > John
> > >
> > >
> > > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com> wrote:
> > >
> > >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com>
> > >> wrote:
> > >>
> > >> > Hey Kevin:
> > >> > I'm a little confused here... the AbstractHttpCache changes simply
> sub
> > >> in
> > >> > ContentRewriterRegistry for the singleton ContentRewriter, and I
> added
> > a
> > >> > test for AbstractHttpCache ensuring precisely what you're asking
> for.
> > >> (?)
> > >>
> > >>
> > >> This code always returns null:
> > >>
> > >> */**
> > >>   * Rewrite the content
> > >>   * @return true if rewritten content was generated
> > >>   */*
> > >>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
> > >> response) {
> > >>     *// TODO - Make this sensitive to custom rewriting rules
> > >> *    *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*;
> > >>   }
> > >>
> > >>
> > >>
> > >> >
> > >> >
> > >> > John
> > >> >
> > >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com>
> > wrote:
> > >> >
> > >> > > The changes to AbstractHttpCache bypass rewriting entirely,
> spending
> > a
> > >> > lot
> > >> > > of effort to do nothing. You should add some tests to verify that
> > >> > rewriting
> > >> > > is actually performed if you're changing this code.
> > >> > >
> > >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> > >> > >
> > >> > > > 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 {@code 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);
> > >> > > > +  }
> > >> > > > +
> > >> > > > +  /** {@inheritDoc} */
> > >> > > > +  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;
> > >> > > > +
> > >> > > > +@ImplementedBy(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);
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
Odd, mail program claims it was attached... perhaps it wasn't sent thru
shindig-dev. I've instead attached the patch to:
https://issues.apache.org/jira/browse/SHINDIG-507

--John

On Tue, Aug 26, 2008 at 3:22 PM, Kevin Brown <et...@google.com> wrote:

> Attached?
>
> On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com> wrote:
>
> > Strange.. the test (AbstractHttpCacheTest) either passed or for some
> reason
> > didn't run in my Maven build, so I failed to catch this.
> > In looking to fix this bug, I ran across some double-writing behavior in
> > AbstractHttpCache. I've fashioned the attached diff in an effort to
> resolve
> > this. Could you, Louis, and anyone else who's interested take a look at
> > this? Behavior now appears to be as intended, without double-rewriting,
> > though I'd really like to ensure I'm not missing whether I'm modifying
> any
> > subtle previous semantics.
> >
> > Thanks,
> > John
> >
> >
> > On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com> wrote:
> >
> >> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com>
> >> wrote:
> >>
> >> > Hey Kevin:
> >> > I'm a little confused here... the AbstractHttpCache changes simply sub
> >> in
> >> > ContentRewriterRegistry for the singleton ContentRewriter, and I added
> a
> >> > test for AbstractHttpCache ensuring precisely what you're asking for.
> >> (?)
> >>
> >>
> >> This code always returns null:
> >>
> >> */**
> >>   * Rewrite the content
> >>   * @return true if rewritten content was generated
> >>   */*
> >>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
> >> response) {
> >>     *// TODO - Make this sensitive to custom rewriting rules
> >> *    *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*;
> >>   }
> >>
> >>
> >>
> >> >
> >> >
> >> > John
> >> >
> >> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com>
> wrote:
> >> >
> >> > > The changes to AbstractHttpCache bypass rewriting entirely, spending
> a
> >> > lot
> >> > > of effort to do nothing. You should add some tests to verify that
> >> > rewriting
> >> > > is actually performed if you're changing this code.
> >> > >
> >> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> >> > >
> >> > > > 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 {@code 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);
> >> > > > +  }
> >> > > > +
> >> > > > +  /** {@inheritDoc} */
> >> > > > +  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;
> >> > > > +
> >> > > > +@ImplementedBy(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);
> >> > > >
> >> > > >
> >> > > >
> >> > >
> >> >
> >>
> >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
Attached?

On Tue, Aug 26, 2008 at 3:11 PM, John Hjelmstad <fa...@google.com> wrote:

> Strange.. the test (AbstractHttpCacheTest) either passed or for some reason
> didn't run in my Maven build, so I failed to catch this.
> In looking to fix this bug, I ran across some double-writing behavior in
> AbstractHttpCache. I've fashioned the attached diff in an effort to resolve
> this. Could you, Louis, and anyone else who's interested take a look at
> this? Behavior now appears to be as intended, without double-rewriting,
> though I'd really like to ensure I'm not missing whether I'm modifying any
> subtle previous semantics.
>
> Thanks,
> John
>
>
> On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com> wrote:
>
>> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com>
>> wrote:
>>
>> > Hey Kevin:
>> > I'm a little confused here... the AbstractHttpCache changes simply sub
>> in
>> > ContentRewriterRegistry for the singleton ContentRewriter, and I added a
>> > test for AbstractHttpCache ensuring precisely what you're asking for.
>> (?)
>>
>>
>> This code always returns null:
>>
>> */**
>>   * Rewrite the content
>>   * @return true if rewritten content was generated
>>   */*
>>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
>> response) {
>>     *// TODO - Make this sensitive to custom rewriting rules
>> *    *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*;
>>   }
>>
>>
>>
>> >
>> >
>> > John
>> >
>> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com> wrote:
>> >
>> > > The changes to AbstractHttpCache bypass rewriting entirely, spending a
>> > lot
>> > > of effort to do nothing. You should add some tests to verify that
>> > rewriting
>> > > is actually performed if you're changing this code.
>> > >
>> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
>> > >
>> > > > 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 {@code 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);
>> > > > +  }
>> > > > +
>> > > > +  /** {@inheritDoc} */
>> > > > +  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;
>> > > > +
>> > > > +@ImplementedBy(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);
>> > > >
>> > > >
>> > > >
>> > >
>> >
>>
>
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
Strange.. the test (AbstractHttpCacheTest) either passed or for some reason
didn't run in my Maven build, so I failed to catch this.
In looking to fix this bug, I ran across some double-writing behavior in
AbstractHttpCache. I've fashioned the attached diff in an effort to resolve
this. Could you, Louis, and anyone else who's interested take a look at
this? Behavior now appears to be as intended, without double-rewriting,
though I'd really like to ensure I'm not missing whether I'm modifying any
subtle previous semantics.

Thanks,
John

On Tue, Aug 26, 2008 at 12:12 AM, Kevin Brown <et...@google.com> wrote:

> On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com> wrote:
>
> > Hey Kevin:
> > I'm a little confused here... the AbstractHttpCache changes simply sub in
> > ContentRewriterRegistry for the singleton ContentRewriter, and I added a
> > test for AbstractHttpCache ensuring precisely what you're asking for. (?)
>
>
> This code always returns null:
>
> */**
>   * Rewrite the content
>   * @return true if rewritten content was generated
>   */*
>  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse
> response) {
>     *// TODO - Make this sensitive to custom rewriting rules
> *    *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*;
>   }
>
>
>
> >
> >
> > John
> >
> > On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com> wrote:
> >
> > > The changes to AbstractHttpCache bypass rewriting entirely, spending a
> > lot
> > > of effort to do nothing. You should add some tests to verify that
> > rewriting
> > > is actually performed if you're changing this code.
> > >
> > > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> > >
> > > > 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 {@code 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);
> > > > +  }
> > > > +
> > > > +  /** {@inheritDoc} */
> > > > +  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;
> > > > +
> > > > +@ImplementedBy(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);
> > > >
> > > >
> > > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by Kevin Brown <et...@google.com>.
On Mon, Aug 25, 2008 at 11:17 PM, John Hjelmstad <fa...@google.com> wrote:

> Hey Kevin:
> I'm a little confused here... the AbstractHttpCache changes simply sub in
> ContentRewriterRegistry for the singleton ContentRewriter, and I added a
> test for AbstractHttpCache ensuring precisely what you're asking for. (?)


This code always returns null:

*/**
   * Rewrite the content
   * @return true if rewritten content was generated
   */*
  *protected* HttpResponse rewrite(HttpRequest request, HttpResponse response) {
    *// TODO - Make this sensitive to custom rewriting rules
*    *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*;
  }



>
>
> John
>
> On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com> wrote:
>
> > The changes to AbstractHttpCache bypass rewriting entirely, spending a
> lot
> > of effort to do nothing. You should add some tests to verify that
> rewriting
> > is actually performed if you're changing this code.
> >
> > On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
> >
> > > 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 {@code 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);
> > > +  }
> > > +
> > > +  /** {@inheritDoc} */
> > > +  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;
> > > +
> > > +@ImplementedBy(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);
> > >
> > >
> > >
> >
>

Re: svn commit: r688943 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet/ main/

Posted by John Hjelmstad <fa...@google.com>.
Hey Kevin:
I'm a little confused here... the AbstractHttpCache changes simply sub in
ContentRewriterRegistry for the singleton ContentRewriter, and I added a
test for AbstractHttpCache ensuring precisely what you're asking for. (?)

John

On Mon, Aug 25, 2008 at 10:25 PM, Kevin Brown <et...@google.com> wrote:

> The changes to AbstractHttpCache bypass rewriting entirely, spending a lot
> of effort to do nothing. You should add some tests to verify that rewriting
> is actually performed if you're changing this code.
>
> On Mon, Aug 25, 2008 at 7:45 PM, <jo...@apache.org> wrote:
>
> > 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 {@code 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);
> > +  }
> > +
> > +  /** {@inheritDoc} */
> > +  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;
> > +
> > +@ImplementedBy(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);
> >
> >
> >
>