Author: gagan
Date: Wed Nov 17 07:35:10 2010
New Revision: 1035940

URL: http://svn.apache.org/viewvc?rev=1035940&view=rev
Log:
Patch by gagan.goku | Issue 2058042: Refactoring ResponseRewriterRegistry to 
take into account container | http://codereview.appspot.com/2058042/

Added:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java
   (with props)
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java
   (with props)
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java
   (with props)
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java
   (with props)
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java
   (with props)
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java
   (with props)
Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/AccelResponseRewriterRegistry.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterRegistry.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
 Wed Nov 17 07:35:10 2010
@@ -20,18 +20,17 @@ package org.apache.shindig.gadgets.http;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
-// Temporary replacement of javax.annotation.Nullable
-import org.apache.shindig.common.Nullable;
-
 import com.google.inject.name.Named;
 
+import org.apache.shindig.common.Nullable;
 import org.apache.shindig.common.servlet.HttpUtil;
 import org.apache.shindig.common.util.DateUtil;
 import org.apache.shindig.common.util.Utf8UrlCoder;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.oauth.OAuthRequest;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 
 import java.util.Collection;
@@ -61,7 +60,7 @@ public class DefaultRequestPipeline impl
   public DefaultRequestPipeline(HttpFetcher httpFetcher,
                                 HttpCache httpCache,
                                 Provider<OAuthRequest> oauthRequestProvider,
-                                @Named("shindig.rewriters.response.pre-cache")
+                                @RewriterRegistry(rewriteFlow = 
RewriteFlow.REQUEST_PIPELINE)
                                 ResponseRewriterRegistry 
responseRewriterRegistry,
                                 InvalidationService invalidationService,
                                 @Nullable HttpResponseMetadataHelper 
metadataHelper) {

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/AccelResponseRewriterRegistry.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/AccelResponseRewriterRegistry.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/AccelResponseRewriterRegistry.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/AccelResponseRewriterRegistry.java
 Wed Nov 17 07:35:10 2010
@@ -1,56 +0,0 @@
-/*
- * 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 com.google.inject.name.Named;
-import org.apache.commons.lang.StringUtils;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
-import org.apache.shindig.gadgets.http.HttpResponseBuilder;
-import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-
-import java.util.List;
-
-/**
- * Response rewriter registry for accel servlet. Encapsulates response 
rewriters
- * that should be applied for Accel servlet.
- *
- * @since 2.0.0
- */
-public class AccelResponseRewriterRegistry extends 
DefaultResponseRewriterRegistry {
-  @Inject
-  public 
AccelResponseRewriterRegistry(@Named("shindig.accelerate.response.rewriters")
-                                       List<ResponseRewriter> rewriters,
-                                       GadgetHtmlParser htmlParser) {
-    super(rewriters, htmlParser);
-  }
-
-  /** {...@inheritdoc} */
-  @Override
-  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
-      throws RewritingException {
-    HttpResponseBuilder builder = new HttpResponseBuilder(resp);
-
-    if (StringUtils.isEmpty(builder.getContent())) {
-      return resp;
-    }
-
-    return super.rewriteHttpResponse(req, resp);
-  }
-}

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,86 @@
+/*
+ * 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.common.collect.ImmutableList;
+import com.google.inject.Provider;
+
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation of ResponseRewriterRegistry which applies the list of
+ * rewriters based on the container and the rewrite flow id.
+ */
+public class ContextAwareRegistry implements ResponseRewriterRegistry {
+  protected final GadgetHtmlParser htmlParser;
+  protected final RewriteFlow rewriteFlow;
+  protected final Provider<Map<RewritePath, Provider<List<ResponseRewriter>>>>
+      rewritePathToRewriterList;
+
+  public ContextAwareRegistry(GadgetHtmlParser htmlParser,
+                              RewriteFlow rewriteFlow,
+                              Provider<Map<RewritePath, 
Provider<List<ResponseRewriter>>>>
+                                  rewritePathToRewriterList) {
+    this.rewriteFlow = rewriteFlow;
+    this.rewritePathToRewriterList = rewritePathToRewriterList;
+    this.htmlParser = htmlParser;
+  }
+
+  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
+      throws RewritingException {
+    HttpResponseBuilder builder = new HttpResponseBuilder(htmlParser, resp);
+
+    for (ResponseRewriter rewriter : getResponseRewriters(req.getContainer())) 
{
+      rewriter.rewrite(req, builder);
+    }
+
+    // Returns the original HttpResponse if no changes have been made.
+    return builder.create();
+  }
+
+  /**
+   * Returns the list of response rewriters for the given container. Falls back
+   * to the default container if no rewriters are present for the given
+   * container.
+   * @param container The container to return rewriters for.
+   * @return List of response rewriters for given container and rewrite flow.
+   */
+  List<ResponseRewriter> getResponseRewriters(String container) {
+    RewritePath rewritePath = new RewritePath(container,  rewriteFlow);
+    Provider<List<ResponseRewriter>> rewriterListProvider =
+        rewritePathToRewriterList.get().get(rewritePath);
+
+    if (rewriterListProvider == null) {
+      // Try default container if there are no rewriters provided for current 
container.
+      rewritePath = new RewritePath(ContainerConfig.DEFAULT_CONTAINER,  
rewriteFlow);
+      rewriterListProvider = rewritePathToRewriterList.get().get(rewritePath);
+    }
+
+    return rewriterListProvider != null ? rewriterListProvider.get() :
+                                          ImmutableList.<ResponseRewriter>of();
+  }
+}

Propchange: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,34 @@
+package org.apache.shindig.gadgets.rewrite;
+
+import com.google.inject.BindingAnnotation;
+
+import org.apache.shindig.config.ContainerConfig;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation that specifies a list of rewriters with the rewriteFlow and
+ * container they are meant to be applied to.
+ */
+...@bindingannotation
+...@target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
+...@retention(RetentionPolicy.RUNTIME)
+public @interface ResponseRewriterList {
+
+  // Enum of rewrite flows being used.
+  public enum RewriteFlow {
+    DEFAULT,
+    REQUEST_PIPELINE,
+    ACCELERATE,
+    DUMMY_FLOW
+  }
+
+  // The flow id signifying what type of rewriting is done.
+  RewriteFlow rewriteFlow();
+
+  // The container context.
+  String container() default ContainerConfig.DEFAULT_CONTAINER;
+}

Propchange: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterList.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterRegistry.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterRegistry.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterRegistry.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ResponseRewriterRegistry.java
 Wed Nov 17 07:35:10 2010
@@ -36,6 +36,7 @@ public interface ResponseRewriterRegistr
    * @param req Request object for context.
    * @param resp Original response object.
    * @return Rewritten response object, or resp if not modified.
+   * @throws RewritingException In case of errors.
    */
   HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
     throws RewritingException;

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
 Wed Nov 17 07:35:10 2010
@@ -18,39 +18,117 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import java.util.List;
-import java.util.Set;
+import com.google.common.collect.ImmutableList;
+import com.google.inject.AbstractModule;
+import com.google.inject.Key;
+import com.google.inject.Provider;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.MapBinder;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
 import org.apache.shindig.gadgets.render.CajaResponseRewriter;
 import org.apache.shindig.gadgets.render.OpenSocialI18NGadgetRewriter;
 import org.apache.shindig.gadgets.render.RenderingGadgetRewriter;
 import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
 import org.apache.shindig.gadgets.render.SanitizingResponseRewriter;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter;
 import org.apache.shindig.gadgets.servlet.CajaContentRewriter;
+import org.apache.shindig.gadgets.uri.AccelUriManager;
 
-import com.google.common.collect.ImmutableList;
-import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
-import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Named;
-import com.google.inject.name.Names;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Guice bindings for the rewrite package.
  */
 public class RewriteModule extends AbstractModule {
+  public static final String ACCEL_CONTAINER = AccelUriManager.CONTAINER;
+  public static final String DEFAULT_CONTAINER = 
ContainerConfig.DEFAULT_CONTAINER;
+
+  // Mapbinder for the map from
+  // RewritePath -> [ List of response rewriters ].
+  private MapBinder<RewritePath, List<ResponseRewriter>> mapbinder;
 
   @Override
   protected void configure() {
-    bind(ResponseRewriterRegistry.class)
-        
.annotatedWith(Names.named("shindig.accelerate.response.rewriter.registry"))
-        .to(AccelResponseRewriterRegistry.class);
-
     configureRewriters();
+    provideResponseRewriters();
+  }
+
+  protected void provideResponseRewriters() {
+    mapbinder = MapBinder.newMapBinder(binder(), new 
TypeLiteral<RewritePath>(){},
+                                       new 
TypeLiteral<List<ResponseRewriter>>() {});
+
+    Provider<List<ResponseRewriter>> accelRewriterList = getResponseRewriters(
+        ACCEL_CONTAINER, RewriteFlow.ACCELERATE);
+    Provider<List<ResponseRewriter>> requestPipelineRewriterList = 
getResponseRewriters(
+        DEFAULT_CONTAINER, RewriteFlow.REQUEST_PIPELINE);
+
+    addBindingForRewritePath(DEFAULT_CONTAINER, RewriteFlow.REQUEST_PIPELINE);
+    addBindingForRewritePath(DEFAULT_CONTAINER, RewriteFlow.DEFAULT);
+    addBindingForRewritePath(ACCEL_CONTAINER, RewriteFlow.ACCELERATE);
+    addBindingForRewritePath(ACCEL_CONTAINER, RewriteFlow.REQUEST_PIPELINE,
+                             requestPipelineRewriterList);
+    addBindingForRewritePath(ACCEL_CONTAINER, RewriteFlow.DEFAULT, 
accelRewriterList);
+  }
+
+  protected void addBindingForRewritePath(String container, RewriteFlow 
rewriteFlow,
+                                          Provider<List<ResponseRewriter>> 
list) {
+    RewritePath rewritePath = new RewritePath(container, rewriteFlow);
+    mapbinder.addBinding(rewritePath).toProvider(list);
+  }
+
+  void addBindingForRewritePath(String container, RewriteFlow rewriteFlow) {
+    addBindingForRewritePath(container, rewriteFlow, binder().getProvider(
+        getKey(container, rewriteFlow)));
+  }
+
+  Provider<List<ResponseRewriter>> getResponseRewriters(String container, 
RewriteFlow flow) {
+    return binder().getProvider(getKey(container, flow));
+  }
+
+  Key<List<ResponseRewriter>> getKey(String container, RewriteFlow flow) {
+    return Key.get(new TypeLiteral<List<ResponseRewriter>>() {},
+                   new RewritePath(container, flow));
+  }
+
+
+  // Provides ResponseRewriterRegistry for DEFAULT flow.
+  @Provides
+  @Singleton
+  @RewriterRegistry(rewriteFlow = RewriteFlow.DEFAULT)
+  public ResponseRewriterRegistry provideDefaultList(GadgetHtmlParser parser,
+      Provider<Map<RewritePath, Provider<List<ResponseRewriter>>>> 
rewritePathToRewriterList) {
+    return new ContextAwareRegistry(parser, RewriteFlow.DEFAULT,
+                                    rewritePathToRewriterList);
+  }
+
+  // Provides ResponseRewriterRegistry for REQUEST_PIPELINE flow.
+  @Provides
+  @Singleton
+  @RewriterRegistry(rewriteFlow = RewriteFlow.REQUEST_PIPELINE)
+  public ResponseRewriterRegistry provideRequestPipelineList(GadgetHtmlParser 
parser,
+      Provider<Map<RewritePath, Provider<List<ResponseRewriter>>>> 
rewritePathToRewriterList) {
+    return new ContextAwareRegistry(parser, RewriteFlow.REQUEST_PIPELINE,
+                                    rewritePathToRewriterList);
+  }
 
+  // Provides ResponseRewriterRegistry for ACCELERATE flow.
+  @Provides
+  @Singleton
+  @RewriterRegistry(rewriteFlow = RewriteFlow.ACCELERATE)
+  public ResponseRewriterRegistry provideAccelerateList(GadgetHtmlParser 
parser,
+      Provider<Map<RewritePath, Provider<List<ResponseRewriter>>>> 
rewritePathToRewriterList) {
+    return new ContextAwareRegistry(parser, RewriteFlow.ACCELERATE,
+                                    rewritePathToRewriterList);
   }
 
   private void configureRewriters() {
@@ -86,28 +164,20 @@ public class RewriteModule extends Abstr
     return ImmutableList.of(proxyingContentRewriter, cajaRewriter);
   }
 
-  // TODO: Clean this up. Ideally we would let the ResponseRewriterRegistry
-  // binding create the concrete object instance.
-  @Provides
-  @Singleton
-  @Named("shindig.rewriters.response.pre-cache")
-  protected ResponseRewriterRegistry providePreCacheResponseRewritersRegistry(
-      GadgetHtmlParser parser,
-      @Named("shindig.rewriters.response.pre-cache") List<ResponseRewriter> 
preCached) {
-    return new DefaultResponseRewriterRegistry(preCached, parser);
-  }
-
+  // Provides the list of rewriters to be applied for REQUEST_PIPELINE flow.
   @Provides
   @Singleton
-  @Named("shindig.rewriters.response.pre-cache")
+  @ResponseRewriterList(rewriteFlow = RewriteFlow.REQUEST_PIPELINE)
   protected List<ResponseRewriter> providePreCacheResponseRewriters(
       BasicImageRewriter imageRewriter) {
     return ImmutableList.<ResponseRewriter>of(imageRewriter);
   }
 
+  // Provides the list of rewriters to be applied for DEFAULT flow.
   @Provides
   @Singleton
-  protected List<ResponseRewriter> provideResponseRewriters(
+  @ResponseRewriterList(rewriteFlow = RewriteFlow.DEFAULT)
+  protected List<ResponseRewriter> provideDefaultRewriters(
       AbsolutePathReferenceRewriter absolutePathRewriter,
       StyleTagExtractorContentRewriter styleTagExtractorRewriter,
       StyleAdjacencyContentRewriter styleAdjacencyRewriter,
@@ -120,9 +190,12 @@ public class RewriteModule extends Abstr
         cssRewriter, sanitizedRewriter, cajaRewriter);
   }
 
+  // Provides the list of rewriters to be applied for ACCELERATE flow for
+  // accel container.
   @Provides
   @Singleton
-  @Named("shindig.accelerate.response.rewriters")
+  @ResponseRewriterList(rewriteFlow = RewriteFlow.ACCELERATE,
+                        container = AccelUriManager.CONTAINER)
   protected List<ResponseRewriter> provideAccelResponseRewriters(
       AbsolutePathReferenceRewriter absolutePathReferenceRewriter,
       StyleTagProxyEmbeddedUrlsRewriter styleTagProxyEmbeddedUrlsRewriter,

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,66 @@
+/*
+ * 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 java.lang.annotation.Annotation;
+
+/**
+ * Implementation of ResponseRewriterList annotation interface.
+ */
+class RewritePath implements ResponseRewriterList {
+  protected final String container;
+  protected final RewriteFlow rewriteFlow;
+
+  public RewritePath(String container, RewriteFlow rewriteFlow) {
+    this.container = container;
+    this.rewriteFlow = rewriteFlow;
+  }
+
+  public RewriteFlow rewriteFlow() {
+    return this.rewriteFlow;
+  }
+
+  public String container() {
+    return container;
+  }
+
+  public int hashCode() {
+    // This is specified in java.lang.Annotation.
+    return ((127* "container".hashCode()) ^ container.hashCode()) +
+           ((127 * "rewriteFlow".hashCode()) ^ rewriteFlow.hashCode());
+  }
+
+  public boolean equals(Object o) {
+    if (!(o instanceof ResponseRewriterList)) {
+      return false;
+    }
+    ResponseRewriterList other = (ResponseRewriterList) o;
+    return rewriteFlow.equals(other.rewriteFlow()) && 
container.equals(other.container());
+  }
+
+  public String toString() {
+    return "@" + ResponseRewriterList.class.getName()
+           + "(rewriteFlow=" + rewriteFlow + ","
+           + "container=" + container + ")";
+  }
+
+  public Class<? extends Annotation> annotationType() {
+    return ResponseRewriterList.class;
+  }
+}
\ No newline at end of file

Propchange: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritePath.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,40 @@
+/*
+ * 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.BindingAnnotation;
+
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation that specifies an instance of ResponseRewriterRegistry to be used
+ * for a given rewriteFlow.
+ */
+...@retention(RetentionPolicy.RUNTIME)
+...@target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
+...@bindingannotation
+public @interface RewriterRegistry {
+  // The flow id signifying what type of rewriting is done.
+  RewriteFlow rewriteFlow();
+}

Propchange: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
 Wed Nov 17 07:35:10 2010
@@ -31,7 +31,9 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.rewrite.DomWalker;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.uri.AccelUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
@@ -57,7 +59,7 @@ public class AccelHandler {
 
   @Inject
   public AccelHandler(RequestPipeline requestPipeline,
-                      @Named("shindig.accelerate.response.rewriter.registry")
+                      @RewriterRegistry(rewriteFlow = RewriteFlow.ACCELERATE)
                       ResponseRewriterRegistry contentRewriterRegistry,
                       AccelUriManager accelUriManager,
                       @Named("shindig.accelerate.remapInternalServerError")

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
 Wed Nov 17 07:35:10 2010
@@ -36,6 +36,8 @@ import org.apache.shindig.gadgets.http.M
 import 
org.apache.shindig.gadgets.http.MultipleResourceHttpFetcher.RequestContext;
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.uri.ConcatUriManager;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -96,7 +98,8 @@ public class ConcatProxyServlet extends 
   }
 
   @Inject
-  public void setContentRewriterRegistry(ResponseRewriterRegistry 
contentRewriterRegistry) {
+  public void setContentRewriterRegistry(@RewriterRegistry(rewriteFlow = 
RewriteFlow.DEFAULT)
+                                         ResponseRewriterRegistry 
contentRewriterRegistry) {
     checkInitialized();
     this.contentRewriterRegistry = contentRewriterRegistry;
   }

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
 Wed Nov 17 07:35:10 2010
@@ -29,7 +29,10 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.oauth.OAuthArguments;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.protocol.BaseRequestItem;
 import org.apache.shindig.protocol.Operation;
@@ -104,6 +107,7 @@ public class HttpRequestHandler {
 
   @Inject
   public HttpRequestHandler(RequestPipeline requestPipeline,
+      @RewriterRegistry(rewriteFlow = RewriteFlow.DEFAULT)
       ResponseRewriterRegistry contentRewriterRegistry,
       Provider<FeedProcessor> feedProcessorProvider) {
     this.requestPipeline = requestPipeline;

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
 Wed Nov 17 07:35:10 2010
@@ -39,7 +39,9 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.oauth.OAuthArguments;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.uri.UriCommon;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -77,6 +79,7 @@ public class MakeRequestHandler {
 
   @Inject
   public MakeRequestHandler(RequestPipeline requestPipeline,
+      @RewriterRegistry(rewriteFlow = RewriteFlow.DEFAULT)
       ResponseRewriterRegistry contentRewriterRegistry,
       Provider<FeedProcessor> feedProcessorProvider) {
     this.requestPipeline = requestPipeline;

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=1035940&r1=1035939&r2=1035940&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
 Wed Nov 17 07:35:10 2010
@@ -21,15 +21,18 @@ package org.apache.shindig.gadgets.servl
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.google.inject.name.Named;
-import org.apache.commons.lang.StringUtils;
+
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.http.RequestPipeline;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
 import org.apache.shindig.gadgets.uri.UriUtils;
@@ -52,6 +55,7 @@ public class ProxyHandler {
 
   @Inject
   public ProxyHandler(RequestPipeline requestPipeline,
+                      @RewriterRegistry(rewriteFlow = RewriteFlow.DEFAULT)
                       ResponseRewriterRegistry contentRewriterRegistry,
                       @Named("shindig.proxy.remapInternalServerError")
                       Boolean remapInternalServerError) {

Added: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,146 @@
+/*
+ * 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.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Provider;
+import com.google.inject.util.Providers;
+
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.ContainerConfig;
+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.rewrite.ResponseRewriterList.RewriteFlow;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Tests for ContextAwareRegistryTest.
+ */
+public class ContextAwareRegistryTest {
+  private ContextAwareRegistry contextAwareRegistry;
+  public static final String TEST_CONTAINER = "test";
+  public static final String DUMMY_CONTAINER = "dummy";
+
+  private class TestRewriter implements ResponseRewriter {
+    public final String val;
+    public TestRewriter(String val) {
+      this.val = val;
+    }
+
+    public void rewrite(HttpRequest request, HttpResponseBuilder response)
+        throws RewritingException {
+      response.addHeader("helloo", val);
+    }
+  }
+
+  void addBindingForRewritePath(String container, RewriteFlow rewriteFlow,
+                                Provider<List<ResponseRewriter>> list,
+                                Map<RewritePath, 
Provider<List<ResponseRewriter>>> map) {
+    RewritePath rewritePath = new RewritePath(container, rewriteFlow);
+    map.put(rewritePath, list);
+  }
+
+  @Test
+  public void testGetResponseRewriters() throws Exception {
+    final Map<RewritePath, Provider<List<ResponseRewriter>>> rewritePathToList 
= Maps.newHashMap();
+    Provider<Map<RewritePath, Provider<List<ResponseRewriter>>>> mapProvider = 
Providers.of(
+        rewritePathToList);
+
+    List<ResponseRewriter> list = ImmutableList.<ResponseRewriter>of(
+        new TestRewriter("helo"), new TestRewriter("buffalo"));
+    List<ResponseRewriter> emptyList = ImmutableList.of();
+    List<ResponseRewriter> list2 = ImmutableList.<ResponseRewriter>of(new 
TestRewriter(null));
+
+    addBindingForRewritePath(ContainerConfig.DEFAULT_CONTAINER, 
RewriteFlow.ACCELERATE,
+                             Providers.of(list), rewritePathToList);
+    addBindingForRewritePath(ContainerConfig.DEFAULT_CONTAINER, 
RewriteFlow.DEFAULT,
+                             Providers.of(emptyList), rewritePathToList);
+
+    list = ImmutableList.<ResponseRewriter>of(new TestRewriter("cat"),
+                                               new TestRewriter("dog"));
+    addBindingForRewritePath(TEST_CONTAINER, RewriteFlow.ACCELERATE,
+                             Providers.of(list), rewritePathToList);
+    addBindingForRewritePath(TEST_CONTAINER, RewriteFlow.DEFAULT,
+                             Providers.of(list2), rewritePathToList);
+
+    // Test container present and flow present.
+    contextAwareRegistry = new ContextAwareRegistry(null, 
RewriteFlow.ACCELERATE, mapProvider);
+    list = contextAwareRegistry.getResponseRewriters(TEST_CONTAINER);
+    assertEquals(2, list.size());
+    assertEquals("cat", ((TestRewriter) list.get(0)).val);
+    assertEquals("dog", ((TestRewriter) list.get(1)).val);
+
+    // Test container present but flow absent.
+    contextAwareRegistry = new ContextAwareRegistry(null, 
RewriteFlow.DUMMY_FLOW, mapProvider);
+    list = contextAwareRegistry.getResponseRewriters(TEST_CONTAINER);
+    assertEquals(0, list.size());
+
+    // Test container absent, fallback to default container.
+    contextAwareRegistry = new ContextAwareRegistry(null, 
RewriteFlow.ACCELERATE, mapProvider);
+    list = contextAwareRegistry.getResponseRewriters(DUMMY_CONTAINER);
+    assertEquals(2, list.size());
+    assertEquals("helo", ((TestRewriter) list.get(0)).val);
+    assertEquals("buffalo", ((TestRewriter) list.get(1)).val);
+
+    // Test container absent, fallback to default container which is also 
absent.
+    rewritePathToList.remove(new RewritePath(ContainerConfig.DEFAULT_CONTAINER,
+                                             RewriteFlow.ACCELERATE));
+    rewritePathToList.remove(new RewritePath(ContainerConfig.DEFAULT_CONTAINER,
+                                             RewriteFlow.DEFAULT));
+    contextAwareRegistry = new ContextAwareRegistry(null, 
RewriteFlow.ACCELERATE, mapProvider);
+    list = contextAwareRegistry.getResponseRewriters(DUMMY_CONTAINER);
+    assertEquals(0, list.size());
+  }
+
+  @Test
+  public void testRewriteResponse() throws Exception {
+  final Map<RewritePath, Provider<List<ResponseRewriter>>> rewritePathToList = 
Maps.newHashMap();
+
+    List<ResponseRewriter> list = ImmutableList.<ResponseRewriter>of(
+        new TestRewriter("helo"), new TestRewriter("buffalo"));
+    List<ResponseRewriter> emptyList = ImmutableList.of();
+
+    addBindingForRewritePath(TEST_CONTAINER, RewriteFlow.ACCELERATE,
+                             Providers.of(list), rewritePathToList);
+    addBindingForRewritePath(TEST_CONTAINER, RewriteFlow.DEFAULT,
+                             Providers.of(emptyList), rewritePathToList);
+
+    // Test container present and flow present.
+    contextAwareRegistry = new ContextAwareRegistry(
+        null, RewriteFlow.ACCELERATE, Providers.of(rewritePathToList));
+
+    HttpRequest req = new HttpRequest(Uri.parse("http://www.example.org/";));
+    req.setContainer(TEST_CONTAINER);
+    HttpResponseBuilder builder = new HttpResponseBuilder();
+    HttpResponse resp = contextAwareRegistry.rewriteHttpResponse(
+        req, builder.create());
+
+    List<String> headers = Lists.newArrayList(resp.getHeaders("helloo"));
+    assertEquals(2, headers.size());
+    assertEquals("helo", headers.get(0));
+    assertEquals("buffalo", headers.get(1));
+  }
+}

Propchange: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContextAwareRegistryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java?rev=1035940&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java
 Wed Nov 17 07:35:10 2010
@@ -0,0 +1,125 @@
+/*
+ * 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.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+import org.apache.shindig.common.PropertiesModule;
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.DefaultGuiceModule;
+import org.apache.shindig.gadgets.oauth.OAuthModule;
+import org.apache.shindig.gadgets.render.CajaResponseRewriter;
+import org.apache.shindig.gadgets.render.SanitizingResponseRewriter;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterList.RewriteFlow;
+import org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter;
+import org.apache.shindig.gadgets.uri.AccelUriManager;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * Tests for RewriteModule. Tests the flows and the associated rewriters.
+ */
+public class RewriteModuleTest {
+  Injector injector;
+
+  public static class TestClass {
+    public final ResponseRewriterRegistry defaultPipelineRegistry;
+    public final ResponseRewriterRegistry requestPipelineRegistry;
+    public final ResponseRewriterRegistry accelPipelineRegistry;
+
+    @Inject
+    public TestClass(@RewriterRegistry(rewriteFlow = 
RewriteFlow.REQUEST_PIPELINE)
+                     ResponseRewriterRegistry requestPipelineRegistry,
+                     @RewriterRegistry(rewriteFlow = RewriteFlow.DEFAULT)
+                     ResponseRewriterRegistry defaultPipelineRegistry,
+                     @RewriterRegistry(rewriteFlow = RewriteFlow.ACCELERATE)
+                     ResponseRewriterRegistry accelPipelineRegistry) {
+      this.defaultPipelineRegistry = defaultPipelineRegistry;
+      this.requestPipelineRegistry = requestPipelineRegistry;
+      this.accelPipelineRegistry = accelPipelineRegistry;
+    }
+  }
+
+  @Before
+  public void setUp() {
+    injector = Guice.createInjector(
+        new PropertiesModule(),
+        new DefaultGuiceModule(), new OAuthModule());
+  }
+
+  @Test
+  public void testDefaultRewriters() throws Exception {
+    ContextAwareRegistry defaultPipelineRegistry = (ContextAwareRegistry)
+        injector.getInstance(TestClass.class).defaultPipelineRegistry;
+
+    List<ResponseRewriter> list = defaultPipelineRegistry.getResponseRewriters(
+        ContainerConfig.DEFAULT_CONTAINER);
+    assertEquals(7, list.size());
+    assertTrue(list.get(0) instanceof AbsolutePathReferenceRewriter);
+    assertTrue(list.get(1) instanceof StyleTagExtractorContentRewriter);
+    assertTrue(list.get(2) instanceof StyleAdjacencyContentRewriter);
+    assertTrue(list.get(3) instanceof ProxyingContentRewriter);
+    assertTrue(list.get(4) instanceof CssResponseRewriter);
+    assertTrue(list.get(5) instanceof SanitizingResponseRewriter);
+    assertTrue(list.get(6) instanceof CajaResponseRewriter);
+
+    list = 
defaultPipelineRegistry.getResponseRewriters(AccelUriManager.CONTAINER);
+    assertEquals(3, list.size());
+    assertTrue(list.get(0) instanceof AbsolutePathReferenceRewriter);
+    assertTrue(list.get(1) instanceof StyleTagProxyEmbeddedUrlsRewriter);
+    assertTrue(list.get(2) instanceof ProxyingContentRewriter);
+  }
+
+  @Test
+  public void testRequestPipelineRewriters() throws Exception {
+    ContextAwareRegistry requestPipelineRegistry = (ContextAwareRegistry)
+        injector.getInstance(TestClass.class).requestPipelineRegistry;
+
+    List<ResponseRewriter> list = requestPipelineRegistry.getResponseRewriters(
+        ContainerConfig.DEFAULT_CONTAINER);
+    assertEquals(1, list.size());
+    assertTrue(list.get(0) instanceof BasicImageRewriter);
+
+    list = 
requestPipelineRegistry.getResponseRewriters(AccelUriManager.CONTAINER);
+    assertEquals(1, list.size());
+    assertTrue(list.get(0) instanceof BasicImageRewriter);
+  }
+
+  @Test
+  public void testAccelRewriters() throws Exception {
+    ContextAwareRegistry accelPipelineRegistry = (ContextAwareRegistry)
+        injector.getInstance(TestClass.class).accelPipelineRegistry;
+
+    List<ResponseRewriter> list = accelPipelineRegistry.getResponseRewriters(
+        AccelUriManager.CONTAINER);
+    assertEquals(3, list.size());
+    assertTrue(list.get(0) instanceof AbsolutePathReferenceRewriter);
+    assertTrue(list.get(1) instanceof StyleTagProxyEmbeddedUrlsRewriter);
+    assertTrue(list.get(2) instanceof ProxyingContentRewriter);
+
+    list = 
accelPipelineRegistry.getResponseRewriters(ContainerConfig.DEFAULT_CONTAINER);
+    assertEquals(0, list.size());
+  }
+}

Propchange: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriteModuleTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to