Author: johnh
Date: Fri Jan 29 21:57:02 2010
New Revision: 904642

URL: http://svn.apache.org/viewvc?rev=904642&view=rev
Log:
Take advantage of gadget rewritter and apply it on arbitrary html page.

This done using new servlet (gadgets/accel?url=...).
Which for now fage a gadget spec with content from the specified url.

This is just the first step in making this servlet usable.


Modified:
    incubator/shindig/trunk/features/src/main/javascript/features/features.txt
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
    incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.full.xml
    incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
    
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java

Modified: 
incubator/shindig/trunk/features/src/main/javascript/features/features.txt
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/features.txt?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- incubator/shindig/trunk/features/src/main/javascript/features/features.txt 
(original)
+++ incubator/shindig/trunk/features/src/main/javascript/features/features.txt 
Fri Jan 29 21:57:02 2010
@@ -28,6 +28,7 @@
 features/core.json/feature.xml
 features/core.legacy/feature.xml
 features/core.log/feature.xml
+features/core.none/feature.xml
 features/core.prefs/feature.xml
 features/core.util/feature.xml
 features/core/feature.xml

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
 Fri Jan 29 21:57:02 2010
@@ -24,6 +24,7 @@
 import org.apache.shindig.common.xml.XmlException;
 import org.apache.shindig.common.xml.XmlUtil;
 import org.apache.shindig.gadgets.http.RequestPipeline;
+import org.apache.shindig.gadgets.servlet.HtmlAccelServlet;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.SpecParserException;
 
@@ -42,7 +43,7 @@
 public class DefaultGadgetSpecFactory extends AbstractSpecFactory<GadgetSpec>
     implements GadgetSpecFactory {
   public static final String CACHE_NAME = "gadgetSpecs";
-  static final String RAW_GADGETSPEC_XML_PARAM_NAME = "rawxml";
+  public static final String RAW_GADGETSPEC_XML_PARAM_NAME = "rawxml";
   static final Uri RAW_GADGET_URI = Uri.parse("http://localhost/raw.xml";);
 
   @Inject
@@ -63,8 +64,14 @@
       // Set URI to a fixed, safe value (localhost), preventing a gadget 
rendered
       // via raw XML (eg. via POST) to be rendered on a locked domain of any 
other
       // gadget whose spec is hosted non-locally.
-      try {
-        return new GadgetSpec(RAW_GADGET_URI, XmlUtil.parse(rawxml), rawxml);
+      try 
+      {
+        Uri uri = RAW_GADGET_URI;
+        // For accelerate page, pass in page url instead of fake one
+        if (HtmlAccelServlet.isAccel(context)) {
+          uri = context.getUrl();
+        }
+        return new GadgetSpec(uri, XmlUtil.parse(rawxml), rawxml);
       } catch (XmlException e) {
         throw new SpecParserException(e);
       }

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/HtmlRenderer.java
 Fri Jan 29 21:57:02 2010
@@ -29,11 +29,9 @@
 import org.apache.shindig.gadgets.spec.View;
 
 import java.util.Collection;
-import java.util.List;
 
 import com.google.inject.Inject;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 /**
@@ -43,17 +41,17 @@
   public static final String PATH_PARAM = "path";
   private final PreloaderService preloader;
   private final ProxyRenderer proxyRenderer;
-  private final List<GadgetRewriter> gadgetRewriters;
+  private final GadgetRewritersProvider rewritersProvider;
   private final GadgetHtmlParser htmlParser;
 
   @Inject
   public HtmlRenderer(PreloaderService preloader,
                       ProxyRenderer proxyRenderer,
-                      List<GadgetRewriter> gadgetRewriters,
+                      GadgetRewritersProvider rewritersProvider,
                       GadgetHtmlParser htmlParser) {
     this.preloader = preloader;
     this.proxyRenderer = proxyRenderer;
-    this.gadgetRewriters = gadgetRewriters;
+    this.rewritersProvider = rewritersProvider;
     this.htmlParser = htmlParser;
   }
 
@@ -87,7 +85,8 @@
       }
 
       MutableContent mc = new MutableContent(htmlParser, content);
-      for (GadgetRewriter rewriter : gadgetRewriters) {
+      for (GadgetRewriter rewriter : 
+           rewritersProvider.getRewriters(gadget.getContext())) {
         rewriter.rewrite(gadget, mc);
       }
       

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
 Fri Jan 29 21:57:02 2010
@@ -31,6 +31,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
 
 /**
  * Guice bindings for the rewrite package.
@@ -39,7 +40,12 @@
 
   @Override
   protected void configure() {
-    bind(new 
TypeLiteral<List<GadgetRewriter>>(){}).toProvider(GadgetRewritersProvider.class);
+    bind(new TypeLiteral<List<GadgetRewriter>>(){})
+        .annotatedWith(Names.named("shindig.rewriters.gadget"))
+        .toProvider(GadgetRewritersProvider.class);
+    bind(new TypeLiteral<List<GadgetRewriter>>(){})
+        .annotatedWith(Names.named("shindig.rewriters.accelerate"))
+        .toProvider(AccelRewritersProvider.class);
     bind(new 
TypeLiteral<List<RequestRewriter>>(){}).toProvider(RequestRewritersProvider.class);
   }
 
@@ -47,7 +53,7 @@
     private final List<GadgetRewriter> rewriters;
 
     @Inject
-    public GadgetRewritersProvider(PipelineDataGadgetRewriter pipelineRewriter,
+    private GadgetRewritersProvider(PipelineDataGadgetRewriter 
pipelineRewriter,
         TemplateRewriter templateRewriter,
         HTMLContentRewriter optimizingRewriter,
         CssRequestRewriter cssRewriter,
@@ -70,11 +76,28 @@
     }
   }
 
+  private static class AccelRewritersProvider implements 
Provider<List<GadgetRewriter>> {
+    private final List<GadgetRewriter> rewriters;
+
+    @Inject
+    private AccelRewritersProvider(
+        HTMLContentRewriter optimizingRewriter,
+        CajaContentRewriter cajaRewriter) {
+      rewriters = Lists.newArrayList();
+      rewriters.add(optimizingRewriter);
+      rewriters.add(cajaRewriter);
+    }
+
+    public List<GadgetRewriter> get() {
+      return rewriters;
+    }
+  }
+
   private static class RequestRewritersProvider implements 
Provider<List<RequestRewriter>> {
     private final List<RequestRewriter> rewriters;
 
     @Inject
-    public RequestRewritersProvider(HTMLContentRewriter optimizingRewriter,
+    private RequestRewritersProvider(HTMLContentRewriter optimizingRewriter,
         CssRequestRewriter cssRewriter,
         SanitizingRequestRewriter sanitizedRewriter) {
       rewriters = Lists.newArrayList();

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
 Fri Jan 29 21:57:02 2010
@@ -32,6 +32,7 @@
 import org.apache.shindig.gadgets.preload.PreloaderService;
 import org.apache.shindig.gadgets.rewrite.CaptureRewriter;
 import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
+import org.apache.shindig.gadgets.servlet.HtmlAccelServlet;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.View;
 import org.junit.Before;
@@ -58,9 +59,20 @@
     }
   };
 
+  private static final GadgetContext ACCEL_CONTEXT = new GadgetContext() {
+    @Override
+    public String getParameter(String name) {
+      if (name == HtmlAccelServlet.ACCEL_GADGET_PARAM_NAME) {
+        return HtmlAccelServlet.ACCEL_GADGET_PARAM_VALUE;
+      }
+      return super.getParameter(name);
+    }
+  };
+
   private final FakePreloaderService preloaderService = new 
FakePreloaderService();
   private final FakeProxyRenderer proxyRenderer = new FakeProxyRenderer();
   private final CaptureRewriter captureRewriter = new CaptureRewriter();
+  private final CaptureRewriter accelRewriter = new CaptureRewriter();
   private HtmlRenderer renderer;
 
   private Gadget makeGadget(String content) throws GadgetException {
@@ -84,7 +96,9 @@
   @Before
   public void setUp() throws Exception {
     renderer = new HtmlRenderer(preloaderService, proxyRenderer,
-        ImmutableList.of((GadgetRewriter) captureRewriter), null);
+        new GadgetRewritersProvider(ImmutableList.of((GadgetRewriter) 
captureRewriter),
+            ImmutableList.of((GadgetRewriter) accelRewriter)),
+        null);
     
   }
   
@@ -112,6 +126,13 @@
     assertTrue("Rewriting not performed.", captureRewriter.viewWasRewritten());
   }
 
+  @Test
+  public void doAccelRewriting() throws Exception {
+    renderer.render(makeGadget(BASIC_HTML_CONTENT).setContext(ACCEL_CONTEXT));
+    assertTrue("Rewriting should not be not performed.", 
!captureRewriter.viewWasRewritten());
+    assertTrue("Rewriting not performed.", accelRewriter.viewWasRewritten());
+  }
+
   private static class FakeProxyRenderer extends ProxyRenderer {
     public FakeProxyRenderer() {
       super(null, null, null);
@@ -140,4 +161,5 @@
       return preloads;
     }
   }
+  
 }

Modified: 
incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.full.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.full.xml?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.full.xml 
(original)
+++ incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.full.xml 
Fri Jan 29 21:57:02 2010
@@ -78,6 +78,14 @@
     </servlet-class>
   </servlet>
 
+  <!-- Accelerate a page -->
+  <servlet>
+    <servlet-name>accel</servlet-name>
+    <servlet-class>
+      org.apache.shindig.gadgets.servlet.HtmlAccelServlet
+    </servlet-class>
+  </servlet>
+
   <!-- Proxy -->
   <servlet>
     <servlet-name>proxy</servlet-name>
@@ -212,6 +220,11 @@
   </servlet-mapping>
 
   <servlet-mapping>
+    <servlet-name>accel</servlet-name>
+    <url-pattern>/gadgets/accel</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
     <servlet-name>metadata</servlet-name>
     <url-pattern>/gadgets/metadata</url-pattern>
   </servlet-mapping>

Modified: incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml 
(original)
+++ incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml Fri Jan 
29 21:57:02 2010
@@ -122,6 +122,13 @@
     </servlet-class>
   </servlet>
 
+  <servlet>
+    <servlet-name>accel</servlet-name>
+    <servlet-class>
+      org.apache.shindig.gadgets.servlet.HtmlAccelServlet
+    </servlet-class>
+  </servlet>
+
   <!-- Proxy -->
   <servlet>
     <servlet-name>proxy</servlet-name>
@@ -264,6 +271,11 @@
   </servlet-mapping>
 
   <servlet-mapping>
+    <servlet-name>accel</servlet-name>
+    <url-pattern>/gadgets/accel</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
     <servlet-name>metadata</servlet-name>
     <url-pattern>/gadgets/metadata</url-pattern>
   </servlet-mapping>

Modified: 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java?rev=904642&r1=904641&r2=904642&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java
 (original)
+++ 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/JettyLauncher.java
 Fri Jan 29 21:57:02 2010
@@ -17,13 +17,16 @@
  */
 package org.apache.shindig.server;
 
+import org.apache.commons.collections.map.HashedMap;
 import org.apache.shindig.auth.AuthenticationServletFilter;
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.servlet.GuiceServletContextListener;
+import org.apache.shindig.gadgets.DefaultGadgetSpecFactory;
 import org.apache.shindig.gadgets.DefaultGuiceModule;
 import org.apache.shindig.gadgets.oauth.OAuthModule;
 import org.apache.shindig.gadgets.servlet.ConcatProxyServlet;
 import org.apache.shindig.gadgets.servlet.GadgetRenderingServlet;
+import org.apache.shindig.gadgets.servlet.HtmlAccelServlet;
 import org.apache.shindig.gadgets.servlet.JsServlet;
 import org.apache.shindig.gadgets.servlet.MakeRequestServlet;
 import org.apache.shindig.gadgets.servlet.ProxyServlet;
@@ -38,6 +41,7 @@
 import org.mortbay.resource.Resource;
 
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.Map;
 
 import com.google.common.base.Joiner;
@@ -49,6 +53,7 @@
 public class JettyLauncher {
 
   private static final String GADGET_BASE = "/gadgets/ifr";
+  private static final String ACCEL_BASE = "/gadgets/accel";
   private static final String PROXY_BASE = "/gadgets/proxy";
   private static final String MAKEREQUEST_BASE = "/gadgets/makeRequest";
   private static final String GADGETS_RPC_BASE = "/gadgets/api/rpc/*";
@@ -104,6 +109,11 @@
     context.addServlet(gadgetServletHolder, GADGET_BASE);
     context.addFilter(AuthenticationServletFilter.class, GADGET_BASE, 0);
 
+    // Attach the html acceleration rendering servlet
+    ServletHolder accelServletHolder = new ServletHolder(new 
HtmlAccelServlet());
+    context.addServlet(accelServletHolder, ACCEL_BASE);
+    context.addFilter(AuthenticationServletFilter.class, ACCEL_BASE, 0);
+
     // Attach the make-request servlet
     ServletHolder makeRequestHolder = new ServletHolder(new 
MakeRequestServlet());
     context.addServlet(makeRequestHolder, MAKEREQUEST_BASE);


Reply via email to