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