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