You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by jo...@apache.org on 2008/09/11 02:59:48 UTC
svn commit: r694084 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/rewrite/
test/java/org/apache/shindig/gadgets/
test/java/org/apache/shindig/gadgets/rewrite/
test/java/org/apache/shindig/gadgets/servlet/
Author: johnh
Date: Wed Sep 10 17:59:47 2008
New Revision: 694084
URL: http://svn.apache.org/viewvc?rev=694084&view=rev
Log:
Renaming BasicContentRewriterRegistry to DefaultContentRewriterRegistry to indicate its suitability to be used in a production environment. Most if not all installations will use it or something derived from it.
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java
Removed:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java?rev=694084&r1=694083&r2=694084&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java Wed Sep 10 17:59:47 2008
@@ -26,7 +26,7 @@
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.BasicContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.DefaultContentRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.shindig.gadgets.spec.GadgetSpec;
@@ -41,7 +41,7 @@
* {@code TtlCache}, whose underlying persistence is provided by {@code CacheProvider},
* as the cache.
*/
-public class CachingContentRewriterRegistry extends BasicContentRewriterRegistry {
+public class CachingContentRewriterRegistry extends DefaultContentRewriterRegistry {
private final TtlCache<String, String> rewrittenCache;
private String rewritersKey;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java?rev=694084&r1=694083&r2=694084&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java Wed Sep 10 17:59:47 2008
@@ -24,7 +24,7 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
-@ImplementedBy(BasicContentRewriterRegistry.class)
+@ImplementedBy(DefaultContentRewriterRegistry.class)
public interface ContentRewriterRegistry {
/**
* Rewrites a {@code Gadget} object given the registered rewriters.
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java?rev=694084&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java Wed Sep 10 17:59:47 2008
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.rewrite;
+
+import com.google.inject.Inject;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.MutableContent;
+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;
+
+/**
+ * Registry into which is injected a single rewriter, which
+ * bootstraps the rewriters list. This enables modularization
+ * of {@code ContentRewriter} instances without changing
+ * Guice injection bindings. The class also provides a method
+ * for manipulating a simple list of rewriters.
+ */
+public class DefaultContentRewriterRegistry implements ContentRewriterRegistry {
+ private final List<ContentRewriter> rewriters;
+ private final GadgetHtmlParser htmlParser;
+
+ @Inject
+ public DefaultContentRewriterRegistry(ContentRewriter firstRewriter,
+ GadgetHtmlParser htmlParser) {
+ this.rewriters = new LinkedList<ContentRewriter>();
+ this.htmlParser = htmlParser;
+ appendRewriter(firstRewriter);
+ }
+
+ /** {@inheritDoc} */
+ public List<ContentRewriter> getRewriters() {
+ return Collections.unmodifiableList(rewriters);
+ }
+
+ public void appendRewriter(ContentRewriter rewriter) {
+ if (rewriter != null) {
+ rewriters.add(rewriter);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public boolean rewriteGadget(Gadget gadget) throws GadgetException {
+ String originalContent = gadget.getContent();
+
+ if (originalContent == null) {
+ // Nothing to rewrite.
+ return false;
+ }
+
+ for (ContentRewriter rewriter : getRewriters()) {
+ rewriter.rewrite(gadget);
+ }
+
+ return !originalContent.equals(gadget.getContent());
+ }
+
+ /** {@inheritDoc} */
+ public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) {
+ MutableContent mc = new MutableContent(htmlParser);
+ String originalContent = resp.getResponseAsString();
+ mc.setContent(originalContent);
+
+ for (ContentRewriter rewriter : getRewriters()) {
+ rewriter.rewrite(req, resp, mc);
+ }
+
+ String rewrittenContent = mc.getContent();
+ if (rewrittenContent.equals(originalContent)) {
+ return resp;
+ }
+
+ return new HttpResponseBuilder(resp).setResponseString(rewrittenContent).create();
+ }
+
+}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java?rev=694084&r1=694083&r2=694084&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java Wed Sep 10 17:59:47 2008
@@ -29,7 +29,7 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.oauth.OAuthFetcher;
-import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.DefaultContentRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import java.util.concurrent.ExecutorService;
@@ -56,7 +56,7 @@
try {
registry = new GadgetFeatureRegistry(null, fetcher);
gadgetServer = new GadgetServer(executor, registry, blacklist,
- containerConfig, new BasicContentRewriterRegistry(rewriter, null),
+ containerConfig, new DefaultContentRewriterRegistry(rewriter, null),
null, fetcherFactory, specFactory, bundleFactory);
} catch (Exception e) {
throw new RuntimeException(e);
Added: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java?rev=694084&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java Wed Sep 10 17:59:47 2008
@@ -0,0 +1,97 @@
+/*
+ * 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 org.easymock.classextension.EasyMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.replay;
+
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.spec.View;
+
+import junit.framework.TestCase;
+
+public class DefaultContentRewriterRegistryTest extends TestCase {
+ public void testNoArgsCreatedBasicRegistry() {
+ DefaultContentRewriterRegistry r = new DefaultContentRewriterRegistry(null, null);
+ assertNotNull(r.getRewriters());
+ assertEquals(0, r.getRewriters().size());
+ }
+
+ public void testSingleValuedBasicRegistry() {
+ DefaultContentRewriterRegistry r = new DefaultContentRewriterRegistry(
+ new NoOpContentRewriter(), null);
+ assertNotNull(r.getRewriters());
+ assertEquals(1, r.getRewriters().size());
+ assertTrue(r.getRewriters().get(0) instanceof NoOpContentRewriter);
+ }
+
+ public void testBasicContentRegistryWithAdds() {
+ ContentRewriter cr0 = new NoOpContentRewriter();
+ DefaultContentRewriterRegistry r = new DefaultContentRewriterRegistry(cr0, null);
+ ContentRewriter cr1 = new NoOpContentRewriter();
+ ContentRewriter cr2 = new NoOpContentRewriter();
+ r.appendRewriter(cr1);
+ r.appendRewriter(cr2);
+ assertNotNull(r.getRewriters());
+ assertEquals(3, r.getRewriters().size());
+ assertSame(cr0, r.getRewriters().get(0));
+ assertSame(cr1, r.getRewriters().get(1));
+ assertSame(cr2, r.getRewriters().get(2));
+ }
+
+ public void testRunGadgetAndHttpResponseRewrites() throws Exception {
+ DefaultContentRewriterRegistry r = new DefaultContentRewriterRegistry(null, null);
+ StringBuilder appendFull = new StringBuilder();
+ for (int i = 0; i < 3; ++i) {
+ String appendNew = "-" + i;
+ appendFull.append(appendNew);
+ r.appendRewriter(new AppendingRewriter(appendNew));
+ }
+ String inputContent = "foo";
+ String rewrittenContent = inputContent + appendFull.toString();
+
+ GadgetSpec spec = EasyMock.createNiceMock(GadgetSpec.class);
+ View view = EasyMock.createNiceMock(View.class);
+ expect(view.getName()).andReturn(GadgetSpec.DEFAULT_VIEW).anyTimes();
+ expect(view.getType()).andReturn(View.ContentType.HTML).anyTimes();
+ expect(view.getContent()).andReturn(inputContent).anyTimes();
+ expect(spec.getView(GadgetSpec.DEFAULT_VIEW)).andReturn(view).anyTimes();
+ GadgetContext context = EasyMock.createNiceMock(GadgetContext.class);
+ expect(context.getView()).andReturn(GadgetSpec.DEFAULT_VIEW).anyTimes();
+ replay(context, view, spec);
+
+ Gadget gadget = new Gadget(context, spec, null, null, null);
+ assertEquals(inputContent, gadget.getContent());
+ assertTrue(r.rewriteGadget(gadget));
+ assertEquals(rewrittenContent, gadget.getContent());
+
+ HttpResponse resp = new HttpResponseBuilder().setResponseString(inputContent).create();
+ assertEquals(inputContent, resp.getResponseAsString());
+ HttpRequest req = EasyMock.createNiceMock(HttpRequest.class); // use mock to be lazy
+ HttpResponse rewritten = r.rewriteHttpResponse(req, resp);
+ assertNotSame(resp, rewritten);
+ assertEquals(rewrittenContent, rewritten.getResponseAsString());
+ }
+
+}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=694084&r1=694083&r2=694084&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java Wed Sep 10 17:59:47 2008
@@ -30,7 +30,7 @@
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.BasicContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.DefaultContentRewriterRegistry;
import org.json.JSONArray;
import org.json.JSONException;
@@ -49,7 +49,7 @@
private static final SecurityToken DUMMY_TOKEN = new FakeGadgetToken();
private final MakeRequestHandler handler = new MakeRequestHandler(fetcherFactory,
- new BasicContentRewriterRegistry(rewriter, null));
+ new DefaultContentRewriterRegistry(rewriter, null));
private void expectGetAndReturnBody(String response) throws Exception {
expectGetAndReturnBody(AuthType.NONE, response);
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java?rev=694084&r1=694083&r2=694084&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java Wed Sep 10 17:59:47 2008
@@ -23,7 +23,7 @@
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.BasicContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.DefaultContentRewriterRegistry;
import static org.easymock.EasyMock.expect;
import javax.servlet.http.HttpServletResponse;
@@ -37,7 +37,7 @@
private final static String DATA_ONE = "hello world";
private final ProxyHandler proxyHandler
- = new ProxyHandler(fetcher, lockedDomainService, new BasicContentRewriterRegistry(rewriter, null));
+ = new ProxyHandler(fetcher, lockedDomainService, new DefaultContentRewriterRegistry(rewriter, null));
private void expectGetAndReturnData(String url, byte[] data) throws Exception {
HttpRequest req = new HttpRequest(Uri.parse(url));