You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by et...@apache.org on 2009/08/27 21:24:58 UTC

svn commit: r808573 - in /incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets: parse/HtmlSerialization.java servlet/CajaContentRewriter.java

Author: etnu
Date: Thu Aug 27 19:24:58 2009
New Revision: 808573

URL: http://svn.apache.org/viewvc?rev=808573&view=rev
Log:
Use caja serializer when caja is being used. This does not yet use the caja parser because the caja parser can't deal with opensocial templates. Louis is working with caja developers to fix that.


Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/HtmlSerialization.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/HtmlSerialization.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/HtmlSerialization.java?rev=808573&r1=808572&r2=808573&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/HtmlSerialization.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/HtmlSerialization.java Thu Aug 27 19:24:58 2009
@@ -17,6 +17,8 @@
  */
 package org.apache.shindig.gadgets.parse;
 
+import com.google.common.collect.ImmutableSet;
+
 import org.apache.xerces.xni.QName;
 import org.cyberneko.html.HTMLEntities;
 import org.w3c.dom.Document;
@@ -25,8 +27,6 @@
 import java.io.StringWriter;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Static class with helpers to manage serialization of a Document.
  * Binds an HtmlSerializer to a Document as user data, and pulls it out
@@ -38,7 +38,7 @@
    * Used to key an instance of HtmlSerializer in
    * document.getUserData
    */
-  private static final String KEY = "serializer";
+  public static final String KEY = "serializer";
 
   /**
    * Used by a parser to record the original length of the content it parsed
@@ -54,7 +54,7 @@
    * @param serializer
    * @param originalContent may be null
    */
-  static void attach(Document doc, HtmlSerializer serializer, String originalContent) {
+  public static void attach(Document doc, HtmlSerializer serializer, String originalContent) {
     doc.setUserData(KEY, serializer, null);
     if (originalContent != null) {
       doc.setUserData(ORIGINAL_LENGTH, originalContent.length(), null);
@@ -87,7 +87,7 @@
    * @param doc
    * @return
    */
-  protected static StringWriter createWriter(Document doc) {
+  public static StringWriter createWriter(Document doc) {
     int originalLength = getOriginalLength(doc);
     if (originalLength == -1) {
       return new StringWriter(8192);

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=808573&r1=808572&r2=808573&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 Thu Aug 27 19:24:58 2009
@@ -18,22 +18,11 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.parse.HtmlSerializer;
 import org.apache.shindig.gadgets.rewrite.MutableContent;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-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.ExternalReference;
 import com.google.caja.lexer.InputSource;
 import com.google.caja.lexer.escaping.Escaping;
@@ -41,16 +30,33 @@
 import com.google.caja.opensocial.GadgetRewriteException;
 import com.google.caja.opensocial.UriCallback;
 import com.google.caja.opensocial.UriCallbackException;
+import com.google.caja.parser.html.Nodes;
+import com.google.caja.render.Concatenator;
 import com.google.caja.reporting.BuildInfo;
 import com.google.caja.reporting.Message;
 import com.google.caja.reporting.MessageContext;
 import com.google.caja.reporting.MessageLevel;
 import com.google.caja.reporting.MessageQueue;
+import com.google.caja.reporting.RenderContext;
 import com.google.caja.reporting.SimpleMessageQueue;
 import com.google.caja.reporting.SnippetProducer;
 import com.google.caja.util.Pair;
 import com.google.common.collect.Maps;
 
+import org.apache.commons.lang.StringUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.util.Map;
+import java.util.logging.Logger;
+
 public class CajaContentRewriter implements org.apache.shindig.gadgets.rewrite.GadgetRewriter {
   private final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
 
@@ -115,10 +121,11 @@
         cajoledOutput.appendChild(doc.adoptNode(html));
         cajoledOutput.appendChild(tameCajaClientApi(doc));
         cajoledOutput.appendChild(doc.adoptNode(script));
-        
+
         createContainerFor(doc, cajoledOutput);
         content.documentChanged();
         safe = true;
+        HtmlSerialization.attach(doc, new CajaHtmlSerializer(), null);
       } catch (GadgetRewriteException e) {
         // There were cajoling errors
         // Content is only used to produce useful snippets with error messages
@@ -142,8 +149,8 @@
     docEl.appendChild(body);
     body.appendChild(el);
   }
-  
-  private Element formatErrors(Document doc, InputSource is, 
+
+  private Element formatErrors(Document doc, InputSource is,
       CharSequence orig, MessageQueue mq) {
     MessageContext mc = new MessageContext();
     Map<InputSource, CharSequence> originalSrc = Maps.newHashMap();
@@ -194,4 +201,11 @@
     }
     logger.info("Unable to cajole gadget: " + errbuilder);
   }
+
+  private static class CajaHtmlSerializer implements HtmlSerializer {
+    public String serialize(Document doc) {
+      StringWriter sw = HtmlSerialization.createWriter(doc);
+      return Nodes.render(doc, new RenderContext(new Concatenator(sw, null)).asXml());
+    }
+  }
 }