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