You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by aw...@apache.org on 2009/04/15 23:35:49 UTC

svn commit: r765373 [1/2] - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/http/ main/java/org/apache/shindig/gadgets/render/ main/java/org/apache/shindig/gadgets/rewrite/ main/java/org/apache/shindig/gadgets/servlet...

Author: awiner
Date: Wed Apr 15 21:35:47 2009
New Revision: 765373

URL: http://svn.apache.org/viewvc?rev=765373&view=rev
Log:
Split ContentRewriter into GadgetRewriter and RequestRewriter halves.
Allow rewriters to throw a checked RewritingException.

Added:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java   (with props)
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java   (with props)
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java   (with props)
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java   (contents, props changed)
      - copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java   (contents, props changed)
      - copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java   (contents, props changed)
      - copied, changed from r765024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriterTest.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java   (contents, props changed)
      - copied, changed from r765026, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriterTest.java
Removed:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterResults.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriterTest.java
Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.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/render/RenderModule.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriteModule.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistryTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CacheKeyBuilder.java Wed Apr 15 21:35:47 2009
@@ -17,11 +17,11 @@
  */
 package org.apache.shindig.gadgets.http;
 
-import com.google.common.collect.Maps;
-
 import java.util.Map;
 import java.util.SortedMap;
 
+import com.google.common.collect.Maps;
+
 /**
  * Builds the cache key object.
  *

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=765373&r1=765372&r2=765373&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 Wed Apr 15 21:35:47 2009
@@ -20,12 +20,16 @@
 
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
 import org.apache.shindig.gadgets.preload.PreloadedData;
 import org.apache.shindig.gadgets.preload.PreloaderService;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
+import org.apache.shindig.gadgets.rewrite.MutableContent;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.spec.View;
 
 import java.util.Collection;
+import java.util.List;
 
 import com.google.inject.Inject;
 
@@ -35,8 +39,9 @@
 public class HtmlRenderer {
   public static final String PATH_PARAM = "path";
   private final PreloaderService preloader;
-  private final ContentRewriterRegistry rewriter;
   private final ProxyRenderer proxyRenderer;
+  private final List<GadgetRewriter> gadgetRewriters;
+  private final GadgetHtmlParser htmlParser;
 
   /**
    * @param requestPipeline Used for performing the proxy request. Always ignores caching because
@@ -47,10 +52,12 @@
   @Inject
   public HtmlRenderer(PreloaderService preloader,
                       ProxyRenderer proxyRenderer,
-                      ContentRewriterRegistry rewriter) {
+                      List<GadgetRewriter> gadgetRewriters,
+                      GadgetHtmlParser htmlParser) {
     this.preloader = preloader;
     this.proxyRenderer = proxyRenderer;
-    this.rewriter = rewriter;
+    this.gadgetRewriters = gadgetRewriters;
+    this.htmlParser = htmlParser;
   }
 
   /**
@@ -82,9 +89,16 @@
         content = proxyRenderer.render(gadget);
       }
 
-      return rewriter.rewriteGadget(gadget, content);
+      MutableContent mc = new MutableContent(htmlParser, content);
+      for (GadgetRewriter rewriter : gadgetRewriters) {
+        rewriter.rewrite(gadget, mc);
+      }
+      
+      return mc.getContent();
     } catch (GadgetException e) {
       throw new RenderingException(e.getMessage(), e);
+    } catch (RewritingException e) {
+      throw new RenderingException(e.getMessage(), e);
     }
   }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderModule.java Wed Apr 15 21:35:47 2009
@@ -35,7 +35,7 @@
     // NOTE: Sanitization only works when using the "full" Neko HTML parser. It is not recommended
     // that you attempt to use sanitization without it.
     bind(setLiteral)
-        .annotatedWith(SanitizedRenderingContentRewriter.AllowedTags.class)
+        .annotatedWith(SanitizingGadgetRewriter.AllowedTags.class)
         .toInstance(ImmutableSet.of("a", "abbr", "acronym", "area", "b", "bdo", "big", "blockquote",
             "body", "br", "caption", "center", "cite", "code", "col", "colgroup", "dd", "del",
             "dfn", "div", "dl", "dt", "em", "font", "h1", "h2", "h3", "h4", "h5", "h6", "head",
@@ -44,7 +44,7 @@
             "tbody", "td", "tfoot", "th", "thead", "tr", "tt", "u", "ul"));
 
     bind(setLiteral)
-        .annotatedWith(SanitizedRenderingContentRewriter.AllowedAttributes.class)
+        .annotatedWith(SanitizingGadgetRewriter.AllowedAttributes.class)
         .toInstance(ImmutableSet.of("abbr", "align", "alt", "axis", "bgcolor", "border",
             "cellpadding", "cellspacing", "char", "charoff", "cite", "class", "clear", "color",
             "cols", "colspan", "compact", "coords", "datetime", "dir", "face", "headers", "height",

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -33,26 +33,16 @@
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.UnsupportedFeatureException;
 import org.apache.shindig.gadgets.UrlGenerator;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.preload.PreloadException;
 import org.apache.shindig.gadgets.preload.PreloadedData;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
 import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
 import org.apache.shindig.gadgets.spec.Feature;
 import org.apache.shindig.gadgets.spec.LocaleSpec;
 import org.apache.shindig.gadgets.spec.MessageBundle;
 import org.apache.shindig.gadgets.spec.ModulePrefs;
 import org.apache.shindig.gadgets.spec.UserPref;
 import org.apache.shindig.gadgets.spec.View;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -68,6 +58,12 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+
 /**
  * Produces a valid HTML document for the gadget output, automatically inserting appropriate HTML
  * document wrapper data as needed.
@@ -75,8 +71,7 @@
  * Currently, this is only invoked directly since the rewriting infrastructure doesn't properly
  * deal with uncacheable rewrite operations.
  *
- * TODO: Break this up into multiple rewriters if and when rewriting infrastructure supports
- * parse tree manipulation without worrying about caching.
+ * TODO: Break this up into multiple rewriters.
  *
  * Should be:
  *
@@ -84,8 +79,8 @@
  * - Javascript injection (including configuration)
  * - html document normalization
  */
-public class RenderingContentRewriter implements ContentRewriter {
-  private static final Logger LOG = Logger.getLogger(RenderingContentRewriter.class.getName());
+public class RenderingGadgetRewriter implements GadgetRewriter {
+  private static final Logger LOG = Logger.getLogger(RenderingGadgetRewriter.class.getName());
 
   static final String DEFAULT_CSS =
       "body,td,div,span,p{font-family:arial,sans-serif;}" +
@@ -104,7 +99,7 @@
    * @param messageBundleFactory Used for injecting message bundles into gadget output.
    */
   @Inject
-  public RenderingContentRewriter(MessageBundleFactory messageBundleFactory,
+  public RenderingGadgetRewriter(MessageBundleFactory messageBundleFactory,
                                   ContainerConfig containerConfig,
                                   GadgetFeatureRegistry featureRegistry,
                                   UrlGenerator urlGenerator) {
@@ -114,15 +109,10 @@
     this.urlGenerator = urlGenerator;
   }
 
-  public RewriterResults rewrite(HttpRequest req, HttpResponse resp, MutableContent content) {
-    // Rendering does not rewrite arbitrary HTTP responses currently
-    return null;
-  }
-
-  public RewriterResults rewrite(Gadget gadget, MutableContent mutableContent) {
+  public void rewrite(Gadget gadget, MutableContent mutableContent) {
     // Don't touch sanitized gadgets.
     if (gadget.sanitizeOutput()) {
-      return RewriterResults.notCacheable();
+      return;
     }
 
     try {
@@ -177,7 +167,6 @@
       injectOnLoadHandlers(body);
 
       mutableContent.documentChanged();
-      return RewriterResults.notCacheable();
     } catch (GadgetException e) {
       // TODO: Rewriter interface needs to be modified to handle GadgetException or
       // RewriterException or something along those lines.

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -18,23 +18,16 @@
  */
 package org.apache.shindig.gadgets.render;
 
-import org.apache.sanselan.ImageFormat;
-import org.apache.sanselan.ImageReadException;
-import org.apache.sanselan.Sanselan;
-import org.apache.sanselan.common.byteSources.ByteSourceInputStream;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.parse.caja.CajaCssSanitizer;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterFeatureFactory;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterUris;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
 import org.apache.shindig.gadgets.rewrite.LinkRewriter;
 import org.apache.shindig.gadgets.rewrite.MutableContent;
 import org.apache.shindig.gadgets.rewrite.ProxyingLinkRewriter;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
 import org.apache.shindig.gadgets.servlet.ProxyBase;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
@@ -43,7 +36,6 @@
 import org.w3c.dom.NodeList;
 import org.w3c.dom.UserDataHandler;
 
-import java.io.IOException;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -52,8 +44,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -70,10 +60,7 @@
  * Generally used in conjunction with a gadget that gets its dynamic behavior externally (proxied
  * rendering, OSML, etc.)
  */
-public class SanitizedRenderingContentRewriter implements ContentRewriter {
-  private static final Logger logger =
-      Logger.getLogger(SanitizedRenderingContentRewriter.class.getName());
-
+public class SanitizingGadgetRewriter implements GadgetRewriter {
   private static final Set<String> URI_ATTRIBUTES = ImmutableSet.of("href", "src");
 
   /** Key stored as element user-data to bypass sanitization */
@@ -124,7 +111,7 @@
   private final ContentRewriterUris rewriterUris;
 
   @Inject
-  public SanitizedRenderingContentRewriter(@AllowedTags Set<String> allowedTags,
+  public SanitizingGadgetRewriter(@AllowedTags Set<String> allowedTags,
       @AllowedAttributes Set<String> allowedAttributes,
       ContentRewriterFeatureFactory rewriterFeatureFactory,
       ContentRewriterUris rewriterUris,
@@ -136,29 +123,8 @@
     this.rewriterFeatureFactory = rewriterFeatureFactory;
   }
 
-  public RewriterResults rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
-    // Content fetched through the proxy can stipulate that it must be sanitized.
-    if (request.isSanitizationRequested()) {
-      ContentRewriterFeature rewriterFeature =
-          rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
-      if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
-        return rewriteProxiedCss(request, resp, content, rewriterFeature);
-      } else if (request.getRewriteMimeType().toLowerCase().startsWith("image/")) {
-        return rewriteProxiedImage(request, resp, content);
-      } else {
-        logger.log(Level.WARNING, "Request to sanitize unknown content type "
-            + request.getRewriteMimeType()
-            + " for " + request.getUri().toString());
-        content.setContent("");
-        return RewriterResults.notCacheable();
-      }
-    } else {
-      // No Op
-      return null;
-    }
-  }
 
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     if (gadget.sanitizeOutput()) {
       boolean sanitized = false;
       try {
@@ -172,69 +138,6 @@
         }
       }
     }
-    return RewriterResults.notCacheable();
-  }
-
-  /**
-   * We don't actually rewrite the image we just ensure that it is in fact a valid
-   * and known image type.
-   */
-  private RewriterResults rewriteProxiedImage(HttpRequest request, HttpResponse resp,
-      MutableContent content) {
-    boolean imageIsSafe = false;
-    try {
-      String contentType = resp.getHeader("Content-Type");
-      if (contentType == null || contentType.toLowerCase().startsWith("image/")) {
-        // Unspecified or unknown image mime type.
-        try {
-          ImageFormat imageFormat = Sanselan
-              .guessFormat(new ByteSourceInputStream(resp.getResponse(),
-                  request.getUri().getPath()));
-          if (imageFormat == ImageFormat.IMAGE_FORMAT_UNKNOWN) {
-            logger.log(Level.INFO, "Unable to sanitize unknown image type "
-                + request.getUri().toString());
-            return RewriterResults.notCacheable();
-          }
-          imageIsSafe = true;
-          // Return null to indicate that no rewriting occurred
-          return null;
-        } catch (IOException ioe) {
-          throw new RuntimeException(ioe);
-        } catch (ImageReadException ire) {
-          throw new RuntimeException(ire);
-        }
-      } else {
-        return RewriterResults.notCacheable();
-      }
-    } finally {
-      if (!imageIsSafe) {
-        content.setContent("");
-      }
-    }
-  }
-
-  /**
-   * Sanitize a CSS file.
-   */
-  private RewriterResults rewriteProxiedCss(HttpRequest request, HttpResponse response,
-      MutableContent content, ContentRewriterFeature rewriterFeature) {
-    String sanitized = "";
-    try {
-      String contentType = response.getHeader("Content-Type");
-      if (contentType == null || contentType.toLowerCase().startsWith("text/")) {
-        String proxyBaseNoGadget = rewriterUris.getProxyBase(request.getContainer());
-        SanitizingProxyingLinkRewriter cssLinkRewriter = new SanitizingProxyingLinkRewriter(
-            request.getGadget(), rewriterFeature, proxyBaseNoGadget, "text/css");
-        sanitized = cssSanitizer.sanitize(content.getContent(), request.getUri(), cssLinkRewriter);
-        return RewriterResults.cacheable(response.getCacheTtl());
-      } else {
-        return RewriterResults.notCacheable();
-      }
-    } finally {
-      // Set sanitized content in finally to ensure it is always cleared in
-      // the case of errors
-      content.setContent(sanitized);
-    }
   }
 
   /**

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizedRenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -22,125 +22,48 @@
 import org.apache.sanselan.ImageReadException;
 import org.apache.sanselan.Sanselan;
 import org.apache.sanselan.common.byteSources.ByteSourceInputStream;
-import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.parse.caja.CajaCssSanitizer;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter.SanitizingProxyingLinkRewriter;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterFeatureFactory;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterUris;
-import org.apache.shindig.gadgets.rewrite.LinkRewriter;
 import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.ProxyingLinkRewriter;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
-import org.apache.shindig.gadgets.servlet.ProxyBase;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.UserDataHandler;
+import org.apache.shindig.gadgets.rewrite.RequestRewriter;
 
 import java.io.IOException;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.BindingAnnotation;
 import com.google.inject.Inject;
 
 /**
- * A content rewriter that will sanitize output for simple 'badge' like display.
- *
- * This is intentionally not as robust as Caja. It is a simple element whitelist. It can not be used
- * for sanitizing either javascript or CSS. CSS is desired in the long run, but it can't be proven
- * safe in the short term.
- *
- * Generally used in conjunction with a gadget that gets its dynamic behavior externally (proxied
- * rendering, OSML, etc.)
+ * Rewriter that sanitizes CSS and image content.
  */
-public class SanitizedRenderingContentRewriter implements ContentRewriter {
+public class SanitizingRequestRewriter implements RequestRewriter {
   private static final Logger logger =
-      Logger.getLogger(SanitizedRenderingContentRewriter.class.getName());
+    Logger.getLogger(SanitizingRequestRewriter.class.getName());
 
-  private static final Set<String> URI_ATTRIBUTES = ImmutableSet.of("href", "src");
-
-  /** Key stored as element user-data to bypass sanitization */
-  private static final String BYPASS_SANITIZATION_KEY = "shindig.bypassSanitization";
-  
-  /** Attributes to forcibly rewrite and require an image mime type */
-  private static final Map<String, ImmutableSet<String>> PROXY_IMAGE_ATTRIBUTES =
-      ImmutableMap.of("img", ImmutableSet.of("src"));
-
-  /**
-   * Is the Gadget to be rendered sanitized?
-   * @return true if sanitization will be enabled
-   */
-  public static boolean isSanitizedRenderingRequest(Gadget gadget) {
-    return ("1".equals(gadget.getContext().getParameter("sanitize")));
-  }
-  
-  /**
-   * Marks that an element and all its attributes are trusted content.
-   * This status is preserved across {@link Node#cloneNode} calls.  Be
-   * extremely careful when using this, especially with {@code includingChildren}
-   * set to {@code true}, as untrusted content that gets inserted (e.g, via
-   * os:RenderAll in templating) would become trusted.
-   * 
-   * @param element the trusted element
-   * @param includingChildren if true, children of this element will are also
-   *     trusted.  Never set this to true on an element that will ever have
-   *     untrusted children inserted (e.g., if it contains or may contain os:Render).
-   */
-  public static void bypassSanitization(Element element, boolean includingChildren) {
-    element.setUserData(BYPASS_SANITIZATION_KEY,
-        includingChildren ? Bypass.ALL : Bypass.ONLY_SELF, copyOnClone);
-  }
-  
-  private static enum Bypass { ALL, ONLY_SELF, NONE };
-  private static UserDataHandler copyOnClone = new UserDataHandler() {
-    public void handle(short operation, String key, Object data, Node src, Node dst) {
-      if (operation == NODE_CLONED) {
-        dst.setUserData(key, data, copyOnClone);
-      }
-    }
-  };
-  
-  private final Set<String> allowedTags;
-  private final Set<String> allowedAttributes;
   private final CajaCssSanitizer cssSanitizer;
   private final ContentRewriterFeatureFactory rewriterFeatureFactory;
   private final ContentRewriterUris rewriterUris;
 
   @Inject
-  public SanitizedRenderingContentRewriter(@AllowedTags Set<String> allowedTags,
-      @AllowedAttributes Set<String> allowedAttributes,
+  public SanitizingRequestRewriter(
       ContentRewriterFeatureFactory rewriterFeatureFactory,
       ContentRewriterUris rewriterUris,
       CajaCssSanitizer cssSanitizer) {
-    this.allowedTags = allowedTags;
-    this.allowedAttributes = allowedAttributes;
     this.rewriterUris = rewriterUris;
     this.cssSanitizer = cssSanitizer;
     this.rewriterFeatureFactory = rewriterFeatureFactory;
   }
 
-  public RewriterResults rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
+  public boolean rewrite(HttpRequest request, HttpResponse resp, MutableContent content) {
     // Content fetched through the proxy can stipulate that it must be sanitized.
     if (request.isSanitizationRequested()) {
       ContentRewriterFeature rewriterFeature =
-          rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
+        rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
       if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
         return rewriteProxiedCss(request, resp, content, rewriterFeature);
       } else if (request.getRewriteMimeType().toLowerCase().startsWith("image/")) {
@@ -150,36 +73,19 @@
             + request.getRewriteMimeType()
             + " for " + request.getUri().toString());
         content.setContent("");
-        return RewriterResults.notCacheable();
+        return true;
       }
     } else {
       // No Op
-      return null;
-    }
-  }
-
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
-    if (gadget.sanitizeOutput()) {
-      boolean sanitized = false;
-      try {
-        new NodeSanitizer(gadget).sanitize(content.getDocument().getDocumentElement());
-        content.documentChanged();
-        sanitized = true;
-      } finally {
-        // Defensively clean the content in case of failure
-        if (!sanitized) {
-          content.setContent("");
-        }
-      }
+      return false;
     }
-    return RewriterResults.notCacheable();
   }
 
   /**
    * We don't actually rewrite the image we just ensure that it is in fact a valid
    * and known image type.
    */
-  private RewriterResults rewriteProxiedImage(HttpRequest request, HttpResponse resp,
+  private boolean rewriteProxiedImage(HttpRequest request, HttpResponse resp,
       MutableContent content) {
     boolean imageIsSafe = false;
     try {
@@ -188,23 +94,23 @@
         // Unspecified or unknown image mime type.
         try {
           ImageFormat imageFormat = Sanselan
-              .guessFormat(new ByteSourceInputStream(resp.getResponse(),
-                  request.getUri().getPath()));
+          .guessFormat(new ByteSourceInputStream(resp.getResponse(),
+              request.getUri().getPath()));
           if (imageFormat == ImageFormat.IMAGE_FORMAT_UNKNOWN) {
             logger.log(Level.INFO, "Unable to sanitize unknown image type "
                 + request.getUri().toString());
-            return RewriterResults.notCacheable();
+            return true;
           }
           imageIsSafe = true;
-          // Return null to indicate that no rewriting occurred
-          return null;
+          // Return false to indicate that no rewriting occurred
+          return false;
         } catch (IOException ioe) {
           throw new RuntimeException(ioe);
         } catch (ImageReadException ire) {
           throw new RuntimeException(ire);
         }
       } else {
-        return RewriterResults.notCacheable();
+        return true;
       }
     } finally {
       if (!imageIsSafe) {
@@ -216,7 +122,7 @@
   /**
    * Sanitize a CSS file.
    */
-  private RewriterResults rewriteProxiedCss(HttpRequest request, HttpResponse response,
+  private boolean rewriteProxiedCss(HttpRequest request, HttpResponse response,
       MutableContent content, ContentRewriterFeature rewriterFeature) {
     String sanitized = "";
     try {
@@ -226,177 +132,13 @@
         SanitizingProxyingLinkRewriter cssLinkRewriter = new SanitizingProxyingLinkRewriter(
             request.getGadget(), rewriterFeature, proxyBaseNoGadget, "text/css");
         sanitized = cssSanitizer.sanitize(content.getContent(), request.getUri(), cssLinkRewriter);
-        return RewriterResults.cacheable(response.getCacheTtl());
-      } else {
-        return RewriterResults.notCacheable();
       }
+      
+      return true;
     } finally {
       // Set sanitized content in finally to ensure it is always cleared in
       // the case of errors
       content.setContent(sanitized);
     }
   }
-
-  /**
-   * Utiliity class to sanitize HTML nodes recursively.
-   */
-  class NodeSanitizer {
-
-    private final LinkRewriter cssRewriter;
-    private final LinkRewriter imageRewriter;
-    private final Uri context;
-
-    NodeSanitizer(Gadget gadget) {
-      this.context = gadget.getSpec().getUrl();
-      Integer expires = rewriterFeatureFactory.getDefault().getExpires();
-      ContentRewriterFeature rewriterFeature =
-          rewriterFeatureFactory.createRewriteAllFeature(expires == null ? -1 : expires);
-
-      String proxyBaseNoGadget = rewriterUris.getProxyBase(gadget.getContext().getContainer());
-      cssRewriter = new SanitizingProxyingLinkRewriter(gadget.getSpec().getUrl(),
-          rewriterFeature, proxyBaseNoGadget, "text/css");
-      imageRewriter = new SanitizingProxyingLinkRewriter(gadget.getSpec().getUrl(),
-          rewriterFeature, proxyBaseNoGadget, "image/*");
-    }
-
-    private void sanitize(Node node) {
-      switch (node.getNodeType()) {
-        case Node.CDATA_SECTION_NODE:
-        case Node.TEXT_NODE:
-        case Node.ENTITY_REFERENCE_NODE:
-          break;
-        case Node.ELEMENT_NODE:
-        case Node.DOCUMENT_NODE:
-          Element element = (Element) node;
-          Bypass bypass = canBypassSanitization(element);
-          if (bypass == Bypass.ALL) {
-            return;
-          } else if (bypass == Bypass.ONLY_SELF) {
-            for (Node child : toList(node.getChildNodes())) {
-              sanitize(child);
-            }
-          } else if (allowedTags.contains(element.getTagName().toLowerCase())) {
-            // TODO - Add special case for stylesheet LINK nodes.
-            // Special case handling for style nodes
-            if (element.getTagName().equalsIgnoreCase("style")) {
-              cssSanitizer.sanitize(element, context, cssRewriter);
-            }
-            filterAttributes(element);
-            for (Node child : toList(node.getChildNodes())) {
-              sanitize(child);
-            }
-          } else {
-            node.getParentNode().removeChild(node);
-          }
-          break;
-        case Node.COMMENT_NODE:
-        default:
-          // Must remove all comments to avoid conditional comment evaluation.
-          // There might be other, unknown types as well. Don't trust them.
-          node.getParentNode().removeChild(node);
-          break;
-      }
-    }
-
-    private void filterAttributes(Element element) {
-      Set<String> rewriteImageAttrs = PROXY_IMAGE_ATTRIBUTES.get(element.getNodeName().toLowerCase());
-      for (Attr attribute : toList(element.getAttributes())) {
-        String name = attribute.getNodeName().toLowerCase();
-        if (allowedAttributes.contains(name)) {
-          if (URI_ATTRIBUTES.contains(name)) {
-            try {
-              Uri uri = Uri.parse(attribute.getNodeValue());
-              String scheme = uri.getScheme();
-              if (!isAllowedScheme(scheme)) {
-                element.removeAttributeNode(attribute);
-              } else if (rewriteImageAttrs != null && rewriteImageAttrs.contains(name)) {
-                // Force rewrite the src of the image through the proxy. This is necessary
-                // because IE will run arbitrary script in files referenced from src
-                attribute.setValue(imageRewriter.rewrite(attribute.getNodeValue(), context));
-              }
-            } catch (IllegalArgumentException e) {
-              // Not a valid URI.
-              element.removeAttributeNode(attribute);
-            }
-          }
-        } else {
-          element.removeAttributeNode(attribute);
-        }
-      }
-    }
-  }
-
-
-  /** Convert a NamedNodeMap to a list for easy and safe operations */
-  private static List<Attr> toList(NamedNodeMap nodes) {
-    List<Attr> list = new ArrayList<Attr>(nodes.getLength());
-
-    for (int i = 0, j = nodes.getLength(); i < j; ++i) {
-      list.add((Attr) nodes.item(i));
-    }
-
-    return list;
-  }
-
-  private static Bypass canBypassSanitization(Element element) {
-    Bypass bypass = (Bypass) element.getUserData(BYPASS_SANITIZATION_KEY);
-    if (bypass == null) {
-      bypass = Bypass.NONE;
-    }
-    return bypass;
-  }
-
-  /** Convert a NamedNodeMap to a list for easy and safe operations */
-  private static List<Node> toList(NodeList nodes) {
-    List<Node> list = new ArrayList<Node>(nodes.getLength());
-
-    for (int i = 0, j = nodes.getLength(); i < j; ++i) {
-      list.add(nodes.item(i));
-    }
-
-    return list;
-  }
-
-  private static boolean isAllowedScheme(String scheme) {
-    return scheme == null || scheme.equals("http") || scheme.equals("https");
-  }
-
-  /**
-   * Forcible rewrite the link through the proxy and force sanitization with
-   * an expected mime type
-   */
-  static class SanitizingProxyingLinkRewriter extends ProxyingLinkRewriter {
-
-    private final String expectedMime;
-
-    SanitizingProxyingLinkRewriter(Uri gadgetUri, ContentRewriterFeature rewriterFeature,
-        String prefix, String expectedMime) {
-      super(gadgetUri, rewriterFeature, prefix);
-      this.expectedMime = expectedMime;
-    }
-
-    @Override
-    public String rewrite(String link, Uri context) {
-      try {
-        Uri.parse(link);
-      } catch (RuntimeException re) {
-        // Any failure in parse
-        return "about:blank";
-      }
-      String rewritten = super.rewrite(link, context);
-      rewritten += '&' + ProxyBase.SANITIZE_CONTENT_PARAM + "=1";
-      rewritten += '&' + ProxyBase.REWRITE_MIME_TYPE_PARAM + '=' + expectedMime;
-      return rewritten;
-    }
-  }
-
-  @Retention(RetentionPolicy.RUNTIME)
-  @Target(ElementType.PARAMETER)
-  @BindingAnnotation
-  public @interface AllowedTags { }
-
-  @Retention(RetentionPolicy.RUNTIME)
-  @Target(ElementType.PARAMETER)
-  @BindingAnnotation
-  public @interface AllowedAttributes { }
 }

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CaptureRewriter.java Wed Apr 15 21:35:47 2009
@@ -25,42 +25,25 @@
 /**
  * Utility rewriter for testing.
  */
-public class CaptureRewriter implements ContentRewriter {
+public class CaptureRewriter implements RequestRewriter, GadgetRewriter {
   private boolean rewroteView = false;
   private boolean rewroteResponse = false;
-  private long cacheTtl = -1;
 
-  public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+  public boolean rewrite(HttpRequest request, HttpResponse original,
       MutableContent content) {
     rewroteResponse = true;
-    return results();
+    return true;
   }
 
   public boolean responseWasRewritten() {
     return rewroteResponse;
   }
 
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     rewroteView = true;
-    return results();
   }
 
   public boolean viewWasRewritten() {
     return rewroteView;
   }
-
-  private RewriterResults results() {
-    if (cacheTtl == -1) {
-      return RewriterResults.cacheableIndefinitely();
-    }
-    return RewriterResults.cacheable(cacheTtl);
-  }
-
-  /**
-   * Sets cache TTL. -1 means cacheable indefinitely.
-   * @param cacheTtl
-   */
-  public void setCacheTtl(long cacheTtl) {
-    this.cacheTtl = cacheTtl;
-  }
 }
\ No newline at end of file

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -20,7 +20,6 @@
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -44,16 +43,16 @@
 /**
  * Rewrite links to referenced content in a stylesheet
  */
-public class CSSContentRewriter implements ContentRewriter {
+public class CssRequestRewriter implements RequestRewriter {
 
-  private static final Logger logger = Logger.getLogger(CSSContentRewriter.class.getName());
+  private static final Logger logger = Logger.getLogger(CssRequestRewriter.class.getName());
 
   private final ContentRewriterFeatureFactory rewriterFeatureFactory;
   private final CajaCssLexerParser cssParser;
   private final ContentRewriterUris rewriterUris;
 
   @Inject
-  public CSSContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
+  public CssRequestRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
       ContentRewriterUris rewriterUris,
       CajaCssLexerParser cssParser) {
     this.rewriterFeatureFactory = rewriterFeatureFactory;
@@ -61,15 +60,10 @@
     this.cssParser = cssParser;
   }
 
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
-    // Not supported
-    return null;
-  }
-
-  public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+  public boolean rewrite(HttpRequest request, HttpResponse original,
       MutableContent content) {
     if (!RewriterUtils.isCss(request, original)) {
-      return null;
+      return false;
     }
     ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
     String css = content.getContent();
@@ -78,7 +72,7 @@
         createLinkRewriter(request.getGadget(), feature, request.getContainer()), sw, false);
     content.setContent(sw.toString());
 
-    return RewriterResults.cacheableIndefinitely();
+    return true;
   }
 
   /**

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java (from r765026, 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/DefaultRequestRewriterRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriterRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java Wed Apr 15 21:35:47 2009
@@ -17,29 +17,26 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import org.apache.shindig.gadgets.Gadget;
-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.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.spec.View;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
 
 import java.util.Collections;
 import java.util.List;
 
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
 /**
  * Basic registry -- just iterates over rewriters and invokes them sequentially.
  */
-public class DefaultContentRewriterRegistry implements ContentRewriterRegistry {
-  protected final List<ContentRewriter> rewriters;
+public class DefaultRequestRewriterRegistry implements RequestRewriterRegistry {
+  protected final List<RequestRewriter> rewriters;
   protected final GadgetHtmlParser htmlParser;
 
   @Inject
-  public DefaultContentRewriterRegistry(List<ContentRewriter> rewriters,
+  public DefaultRequestRewriterRegistry(List<RequestRewriter> rewriters,
       GadgetHtmlParser htmlParser) {
     if (rewriters == null) {
       rewriters = Collections.emptyList();
@@ -49,41 +46,13 @@
   }
 
   /** {@inheritDoc} */
-  public String rewriteGadget(Gadget gadget, View currentView) throws GadgetException {
-    if (currentView == null) {
-      // Nothing to rewrite.
-      return null;
-    }
-    MutableContent mc = new MutableContent(htmlParser, currentView.getContent());
-
-    for (ContentRewriter rewriter : rewriters) {
-      rewriter.rewrite(gadget, mc);
-    }
-    return mc.getContent();
-  }
-
-  /** {@inheritDoc} */
-  public String rewriteGadget(Gadget gadget, String content) {
-    if (content == null) {
-      // Nothing to rewrite.
-      return null;
-    }
-    MutableContent mc = new MutableContent(htmlParser, content);
-
-    for (ContentRewriter rewriter : rewriters) {
-      rewriter.rewrite(gadget, mc);
-    }
-
-    return mc.getContent();
-  }
-
-  /** {@inheritDoc} */
-  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) {
+  public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
+      throws RewritingException {
     MutableContent mc = new MutableContent(htmlParser, resp);
 
     boolean wasRewritten = false;
-    for (ContentRewriter rewriter : rewriters) {
-      wasRewritten |= (rewriter.rewrite(req, resp, mc) != null);
+    for (RequestRewriter rewriter : rewriters) {
+      wasRewritten |= rewriter.rewrite(req, resp, mc);
     }
 
     if (wasRewritten) {
@@ -91,8 +60,4 @@
     }
     return resp;
   }
-
-  protected List<ContentRewriter> getRewriters() {
-    return rewriters;
-  }
 }

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultRequestRewriterRegistry.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,34 @@
+/*
+ * 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.apache.shindig.gadgets.Gadget;
+
+/**
+ * Interface for rewriters that modify gadget content.
+ */
+public interface GadgetRewriter {
+  /**
+   * Rewrite the gadget.
+   * 
+   * @param gadget Gadget to rewrite.
+   * @param content the content of the gadget to be manipulated.
+   */
+  void rewrite(Gadget gadget, MutableContent content) throws RewritingException;
+}

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/GadgetRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java Wed Apr 15 21:35:47 2009
@@ -51,7 +51,7 @@
  * - Moving all style into head and converting @imports into links
  * - Proxying referred content of images and embeds
  */
-public class HTMLContentRewriter implements ContentRewriter {
+public class HTMLContentRewriter implements GadgetRewriter, RequestRewriter {
   private final static int MAX_URL_LENGTH = 1500;
   
   private final static String JS_MIME_TYPE = "text/javascript";
@@ -64,48 +64,51 @@
   );
 
   private final ContentRewriterFeatureFactory rewriterFeatureFactory;
-  private final CSSContentRewriter cssRewriter;
+  private final CssRequestRewriter cssRewriter;
   private final ContentRewriterUris rewriterUris;
 
   @Inject
   public HTMLContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
       ContentRewriterUris rewriterUris,
-      CSSContentRewriter cssRewriter) {
+      CssRequestRewriter cssRewriter) {
     this.rewriterFeatureFactory = rewriterFeatureFactory;
     this.rewriterUris = rewriterUris;
     this.cssRewriter = cssRewriter;
   }
 
-  public RewriterResults rewrite(HttpRequest request, HttpResponse original,
+  public boolean rewrite(HttpRequest request, HttpResponse original,
       MutableContent content) {
     if (RewriterUtils.isHtml(request, original)) {
       ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
       return rewriteImpl(feature, request.getGadget(), request.getUri(), content,
           request.getContainer());
     }
-    return null;
+    
+    return false;
   }
 
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     // Don't rewrite urls if caja is enabled since caja will inline them anyway
     if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
         "1".equals(gadget.getContext().getParameter("caja"))) {
-      return null;
+      return;
     }
+    
     ContentRewriterFeature feature = rewriterFeatureFactory.get(gadget.getSpec());
     Uri contentBase = gadget.getSpec().getUrl();
     View view = gadget.getCurrentView();
     if (view != null && view.getHref() != null) {
       contentBase = view.getHref();
     }
-    return rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase, content,
+    
+    rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase, content,
         gadget.getContext().getContainer());
   }
 
-  RewriterResults rewriteImpl(ContentRewriterFeature feature, Uri gadgetUri,
+  boolean rewriteImpl(ContentRewriterFeature feature, Uri gadgetUri,
                                         Uri contentBase, MutableContent content, String container) {
     if (!feature.isRewriteEnabled() || content.getDocument() == null) {
-      return null;
+      return false;
     }
 
     // Get ALL interesting tags
@@ -131,7 +134,7 @@
       MutableContent.notifyEdit(content.getDocument());
     }
 
-    return RewriterResults.cacheableIndefinitely();
+    return mutated;
   }
 
   protected boolean rewriteStyleTags(Element head, List<Element> elementList,

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java (from r765026, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java&r1=765026&r2=765373&rev=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java Wed Apr 15 21:35:47 2009
@@ -21,8 +21,6 @@
 import org.apache.shindig.common.JsonSerializer;
 import org.apache.shindig.common.xml.DomUtil;
 import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.preload.PipelineExecutor;
 import org.apache.shindig.gadgets.spec.PipelinedData;
 import org.apache.shindig.gadgets.spec.SpecParserException;
@@ -45,26 +43,22 @@
  * 
  * This rewriter cannot be used currently without the SocialMarkupHtmlParser.
  */
-public class PipelineDataContentRewriter implements ContentRewriter {
+public class PipelineDataGadgetRewriter implements GadgetRewriter {
 
   private static final Logger logger = Logger.getLogger(
-      PipelineDataContentRewriter.class.getName());
+      PipelineDataGadgetRewriter.class.getName());
   
   private final PipelineExecutor executor;
 
   @Inject
-  public PipelineDataContentRewriter(PipelineExecutor executor) {
+  public PipelineDataGadgetRewriter(PipelineExecutor executor) {
     this.executor = executor;
   }
   
-  public RewriterResults rewrite(HttpRequest request, HttpResponse original, MutableContent content) {
-    return null;
-  }
-
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     // Only bother for gadgets using the opensocial-data feature
     if (!gadget.getSpec().getModulePrefs().getFeatures().containsKey("opensocial-data")) {
-      return null;
+      return;
     }
     
     Document doc = content.getDocument();
@@ -92,7 +86,7 @@
     }
     
     if (pipelineNodes.isEmpty()) {
-      return null;
+      return;
     }
     
     PipelineExecutor.Results results =
@@ -136,8 +130,6 @@
       gadget.addFeature("opensocial-data-context");
       gadget.removeFeature("opensocial-data");
     }
-    
-    return RewriterResults.notCacheable();
   }
   
   static class PipelineState {

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriter.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,39 @@
+/*
+ * 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.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+
+/**
+ * Interface for rewriters that modify request content.
+ */
+public interface RequestRewriter {
+
+  /**
+   * Rewrite the original content located at source.
+   *
+   * @param request Originating request, as context.
+   * @param original Original HTTP response, for context.
+   * @param content Original content.
+   * @return true if any rewriting occurred
+   */
+  boolean rewrite(HttpRequest request, HttpResponse original, MutableContent content)
+      throws RewritingException;
+}

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java (from r765026, 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/RequestRewriterRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java&r1=765026&r2=765373&rev=765373&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/RequestRewriterRegistry.java Wed Apr 15 21:35:47 2009
@@ -17,36 +17,16 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import com.google.inject.ImplementedBy;
-import org.apache.shindig.gadgets.Gadget;
-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.spec.View;
+
+import com.google.inject.ImplementedBy;
 
 /**
- * Performs rewriting operations by invoking one or more ContentRewriters.
+ * Performs rewriting operations by invoking one or more {@link RequestRewriter}s.
  */
-@ImplementedBy(DefaultContentRewriterRegistry.class)
-public interface ContentRewriterRegistry {
-
-  /**
-   * Rewrites a {@code Gadget} object given the registered rewriters.
-   * @param gadget Gadget object to use as a rewriting context.
-   * @param currentView The gadget view to rewrite
-   * @return The rewritten content.
-   * @throws GadgetException Potentially passed through from rewriters
-   */
-  String rewriteGadget(Gadget gadget, View currentView) throws GadgetException;
-
-  /**
-   * Rewrites a {@code Gadget} object given the registered rewriters.
-   * @param gadget Gadget object to use as a rewriting context.
-   * @param content The content to be rewritten.
-   * @return The rewritten content.
-   * @throws GadgetException Potentially passed through from rewriters
-   */
-  String rewriteGadget(Gadget gadget, String content) throws GadgetException;
+@ImplementedBy(DefaultRequestRewriterRegistry.class)
+public interface RequestRewriterRegistry {
 
   /**
    * Rewrites an {@code HttpResponse} object with the given request as context,
@@ -55,5 +35,6 @@
    * @param resp Original response object.
    * @return Rewritten response object, or resp if not modified.
    */
-  HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp);
+  HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp)
+    throws RewritingException;
 }

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RequestRewriterRegistry.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

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=765373&r1=765372&r2=765373&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 Wed Apr 15 21:35:47 2009
@@ -18,8 +18,9 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import org.apache.shindig.gadgets.render.RenderingContentRewriter;
-import org.apache.shindig.gadgets.render.SanitizedRenderingContentRewriter;
+import org.apache.shindig.gadgets.render.RenderingGadgetRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
+import org.apache.shindig.gadgets.render.SanitizingRequestRewriter;
 import org.apache.shindig.gadgets.servlet.CajaContentRewriter;
 
 import java.util.List;
@@ -37,31 +38,49 @@
 
   @Override
   protected void configure() {
-    bind(new TypeLiteral<List<ContentRewriter>>(){}).toProvider(ContentRewritersProvider.class);
+    bind(new TypeLiteral<List<GadgetRewriter>>(){}).toProvider(GadgetRewritersProvider.class);
+    bind(new TypeLiteral<List<RequestRewriter>>(){}).toProvider(RequestRewritersProvider.class);
   }
 
-  private static class ContentRewritersProvider implements Provider<List<ContentRewriter>> {
-    private final List<ContentRewriter> rewriters;
+  private static class GadgetRewritersProvider implements Provider<List<GadgetRewriter>> {
+    private final List<GadgetRewriter> rewriters;
 
     @Inject
-    public ContentRewritersProvider(PipelineDataContentRewriter pipelineRewriter,
+    public GadgetRewritersProvider(PipelineDataGadgetRewriter pipelineRewriter,
         TemplateRewriter templateRewriter,
         HTMLContentRewriter optimizingRewriter,
-        CSSContentRewriter cssRewriter,
+        CssRequestRewriter cssRewriter,
         CajaContentRewriter cajaRewriter,
-        SanitizedRenderingContentRewriter sanitizedRewriter,
-        RenderingContentRewriter renderingRewriter) {
+        SanitizingGadgetRewriter sanitizedRewriter,
+        RenderingGadgetRewriter renderingRewriter) {
       rewriters = Lists.newArrayList();
       rewriters.add(pipelineRewriter);
       rewriters.add(templateRewriter);
       rewriters.add(optimizingRewriter);
-      rewriters.add(cssRewriter);
       rewriters.add(cajaRewriter);
       rewriters.add(sanitizedRewriter);
       rewriters.add(renderingRewriter);
     }
 
-    public List<ContentRewriter> get() {
+    public List<GadgetRewriter> get() {
+      return rewriters;
+    }
+  }
+
+  private static class RequestRewritersProvider implements Provider<List<RequestRewriter>> {
+    private final List<RequestRewriter> rewriters;
+
+    @Inject
+    public RequestRewritersProvider(HTMLContentRewriter optimizingRewriter,
+        CssRequestRewriter cssRewriter,
+        SanitizingRequestRewriter sanitizedRewriter) {
+      rewriters = Lists.newArrayList();
+      rewriters.add(optimizingRewriter);
+      rewriters.add(cssRewriter);
+      rewriters.add(sanitizedRewriter);
+    }
+
+    public List<RequestRewriter> get() {
       return rewriters;
     }
   }

Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java?rev=765373&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java Wed Apr 15 21:35:47 2009
@@ -0,0 +1,22 @@
+package org.apache.shindig.gadgets.rewrite;
+
+/**
+ * Exceptions thrown during content rewriting.
+ *
+ * These exceptions will usually translate directly into an end-user error message, so they should
+ * be easily localizable.
+ */
+public class RewritingException extends Exception {
+  public RewritingException(Throwable t) {
+    super(t);
+  }
+
+  public RewritingException(String message) {
+    super(message);
+  }
+
+  public RewritingException(String message, Throwable t) {
+    super(message, t);
+  }
+
+}

Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewritingException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java Wed Apr 15 21:35:47 2009
@@ -22,8 +22,6 @@
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.MessageBundleFactory;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.spec.Feature;
 import org.apache.shindig.gadgets.spec.MessageBundle;
 import org.apache.shindig.gadgets.templates.MessageELResolver;
@@ -55,7 +53,7 @@
  * Only templates without the @name and @tag attributes are processed
  * automatically.
  */
-public class TemplateRewriter implements ContentRewriter {
+public class TemplateRewriter implements GadgetRewriter {
 
   public final static Set<String> TAGS = ImmutableSet.of("script");
 
@@ -81,24 +79,18 @@
     this.baseTagRegistry = baseTagRegistry;
   }
 
-  public RewriterResults rewrite(HttpRequest request, HttpResponse original,
-      MutableContent content) {
-    return null;
-  }
-
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     Feature f = gadget.getSpec().getModulePrefs().getFeatures()
         .get("opensocial-templates");
     if (f != null && isServerTemplatingEnabled(f)) {
       try {
-        return rewriteImpl(gadget, content);
+        rewriteImpl(gadget, content);
       } catch (GadgetException ge) {
         // TODO: Rewriter interface needs to be modified to handle GadgetException or
         // RewriterException or something along those lines.
         throw new RuntimeException(ge);
       }
     }
-    return null;
   }
 
   /**
@@ -111,7 +103,7 @@
     return (!"true".equalsIgnoreCase(f.getParams().get(DISABLE_AUTO_PROCESSING_PARAM)));
   }
 
-  private RewriterResults rewriteImpl(Gadget gadget, MutableContent content)
+  private void rewriteImpl(Gadget gadget, MutableContent content)
       throws GadgetException {
     List<Element> templates = ImmutableList.copyOf(
       Iterables.filter(
@@ -124,7 +116,7 @@
     
     TagRegistry registry = registerCustomTags(templates);
     
-    return processInlineTemplates(gadget, content, templates, registry);
+    processInlineTemplates(gadget, content, templates, registry);
   }
   
   /**
@@ -158,7 +150,7 @@
     return baseTagRegistry.addHandlers(handlers.build());
   }
   
-  private RewriterResults processInlineTemplates(Gadget gadget, MutableContent content,
+  private void processInlineTemplates(Gadget gadget, MutableContent content,
       List<Element> allTemplates, TagRegistry registry) throws GadgetException {
     Map<String, Object> pipelinedData = content.getPipelinedData();
 
@@ -208,8 +200,6 @@
     if (!needsFeature) {
       gadget.removeFeature("opensocial-templates");
     }
-    
-    return RewriterResults.notCacheable();
   }
 
   /**

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java Wed Apr 15 21:35:47 2009
@@ -18,12 +18,17 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
 import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RewriterResults;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URI;
+import java.util.Map;
+import java.util.logging.Logger;
 
 import com.google.caja.lexer.CharProducer;
 import com.google.caja.lexer.ExternalReference;
@@ -44,24 +49,10 @@
 import com.google.caja.reporting.SnippetProducer;
 import com.google.common.collect.Maps;
 
-import org.apache.commons.lang.StringUtils;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.URI;
-import java.util.Map;
-import java.util.logging.Logger;
-
-public class CajaContentRewriter implements ContentRewriter {
+public class CajaContentRewriter implements org.apache.shindig.gadgets.rewrite.GadgetRewriter {
   private final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
 
-  public RewriterResults rewrite(HttpRequest req, HttpResponse resp, MutableContent content) {
-    return null;
-  }
-
-  public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+  public void rewrite(Gadget gadget, MutableContent content) {
     if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
         "1".equals(gadget.getContext().getParameter("caja"))) {
 
@@ -115,15 +106,14 @@
       } catch (GadgetRewriteException e) {
         content.setContent(messagesToHtml(is, origContent, mq));
         throwCajolingException(e, mq);
-        return RewriterResults.notCacheable();
+        return;
       } catch (IOException e) {
         content.setContent(messagesToHtml(is, origContent, mq));
         throwCajolingException(e, mq);
-        return RewriterResults.notCacheable();
+        return;
       }
       content.setContent(tameCajaClientApi() + output);
     }
-    return null;
   }
 
   private String messagesToHtml(InputSource is, CharSequence orig, MessageQueue mq) {

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java Wed Apr 15 21:35:47 2009
@@ -28,7 +28,8 @@
 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.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.protocol.BaseRequestItem;
 import org.apache.shindig.protocol.Operation;
 import org.apache.shindig.protocol.ProtocolException;
@@ -90,11 +91,11 @@
   static final Set<String> BAD_HEADERS = ImmutableSet.of("HOST", "ACCEPT", "ACCEPT-ENCODING");
 
   private final RequestPipeline requestPipeline;
-  private final ContentRewriterRegistry contentRewriterRegistry;
+  private final RequestRewriterRegistry contentRewriterRegistry;
 
   @Inject
   public HttpRequestHandler(RequestPipeline requestPipeline,
-      ContentRewriterRegistry contentRewriterRegistry) {
+      RequestRewriterRegistry contentRewriterRegistry) {
     this.requestPipeline = requestPipeline;
     this.contentRewriterRegistry = contentRewriterRegistry;
   }
@@ -226,6 +227,8 @@
       return httpApiResponse;
     } catch (GadgetException ge) {
       throw new ProtocolException(ResponseError.INTERNAL_ERROR, ge.getMessage());
+    } catch (RewritingException re) {
+      throw new ProtocolException(ResponseError.INTERNAL_ERROR, re.getMessage());
     }
   }
 

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java Wed Apr 15 21:35:47 2009
@@ -31,7 +31,8 @@
 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.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -63,11 +64,11 @@
   public static final String AUTHZ_PARAM = "authz";
 
   private final RequestPipeline requestPipeline;
-  private final ContentRewriterRegistry contentRewriterRegistry;
+  private final RequestRewriterRegistry contentRewriterRegistry;
 
   @Inject
   public MakeRequestHandler(RequestPipeline requestPipeline,
-      ContentRewriterRegistry contentRewriterRegistry) {
+      RequestRewriterRegistry contentRewriterRegistry) {
     this.requestPipeline = requestPipeline;
     this.contentRewriterRegistry = contentRewriterRegistry;
   }
@@ -85,7 +86,11 @@
 
     // Rewrite the response
     if (contentRewriterRegistry != null) {
-      results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+      try {
+        results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+      } catch (RewritingException e) {
+        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+      }
     }
 
     // Serialize the response

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java Wed Apr 15 21:35:47 2009
@@ -33,7 +33,8 @@
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.RequestPipeline;
-import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.RewritingException;
 
 import java.io.IOException;
 import java.util.Map;
@@ -55,12 +56,12 @@
 
   private final RequestPipeline requestPipeline;
   private final LockedDomainService lockedDomainService;
-  private final ContentRewriterRegistry contentRewriterRegistry;
+  private final RequestRewriterRegistry contentRewriterRegistry;
 
   @Inject
   public ProxyHandler(RequestPipeline requestPipeline,
                       LockedDomainService lockedDomainService,
-                      ContentRewriterRegistry contentRewriterRegistry) {
+                      RequestRewriterRegistry contentRewriterRegistry) {
     this.requestPipeline = requestPipeline;
     this.lockedDomainService = lockedDomainService;
     this.contentRewriterRegistry = contentRewriterRegistry;
@@ -135,7 +136,11 @@
     HttpRequest rcr = buildHttpRequest(request);
     HttpResponse results = requestPipeline.execute(rcr);
     if (contentRewriterRegistry != null) {
-      results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+      try {
+        results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
+      } catch (RewritingException e) {
+        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+      }
     }
 
     setResponseHeaders(request, response, results);

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java?rev=765373&r1=765372&r2=765373&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java Wed Apr 15 21:35:47 2009
@@ -29,7 +29,7 @@
 import org.apache.shindig.common.xml.DomUtil;
 import org.apache.shindig.common.util.Utf8UrlCoder;
 import org.apache.shindig.common.JsonSerializer;
-import org.apache.shindig.gadgets.render.SanitizedRenderingContentRewriter;
+import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
 import org.apache.shindig.gadgets.GadgetFeatureRegistry;
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.GadgetFeature;
@@ -134,8 +134,8 @@
     }
 
     // Bypass sanitization for the holder tag and the call to swfobject
-    SanitizedRenderingContentRewriter.bypassSanitization(altHolder, false);
-    SanitizedRenderingContentRewriter.bypassSanitization(script, false);
+    SanitizingGadgetRewriter.bypassSanitization(altHolder, false);
+    SanitizingGadgetRewriter.bypassSanitization(script, false);
     ensureSwfobject(result.getOwnerDocument(), processor);
   }
 
@@ -212,7 +212,7 @@
     }
     swfobject.setUserData(SWFOBJECT, SWFOBJECT, null);
     head.appendChild(swfobject);
-    SanitizedRenderingContentRewriter.bypassSanitization(swfobject, false);
+    SanitizingGadgetRewriter.bypassSanitization(swfobject, false);
   }
 
   /**