Author: johnh
Date: Wed May 20 20:25:50 2009
New Revision: 776832

URL: http://svn.apache.org/viewvc?rev=776832&view=rev
Log:
Let message bundle message values include XML tags. Previously these were 
completely dropped since .getTextContent() just concatenates all Text nodes 
found as descendants of an element.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java?rev=776832&r1=776831&r2=776832&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
 Wed May 20 20:25:50 2009
@@ -20,6 +20,8 @@
 import org.apache.shindig.common.xml.XmlException;
 import org.apache.shindig.common.xml.XmlUtil;
 
+import org.apache.shindig.gadgets.parse.DefaultHtmlSerializer;
+
 import com.google.common.collect.Maps;
 import com.google.common.collect.ImmutableMap;
 
@@ -27,6 +29,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+import java.io.IOException;
+import java.io.StringWriter;
 import java.util.Map;
 
 /**
@@ -36,6 +40,7 @@
 
   public static final MessageBundle EMPTY = new MessageBundle();
 
+  private static final DefaultHtmlSerializer htmlSerializer = new 
DefaultHtmlSerializer();
   private final ImmutableMap<String, String> messages;
   private final String languageDirection;
   private final String jsonString;
@@ -155,7 +160,17 @@
         throw new SpecParserException(
             "All message bundle entries must have a name attribute.");
       }
-      messages.put(name, msg.getTextContent().trim());
+      StringWriter sw = new StringWriter();
+      NodeList msgChildren = msg.getChildNodes();
+      for (int child = 0; child < msgChildren.getLength(); ++child) {
+        try {
+          htmlSerializer.serialize(msgChildren.item(child), sw);
+        } catch (IOException e) {
+          throw new SpecParserException("Unexpected error getting value of msg 
node", 
+                                        new XmlException(e));
+        }
+      }
+      messages.put(name, sw.toString().trim());
     }
 
     return ImmutableMap.copyOf(messages);

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java?rev=776832&r1=776831&r2=776832&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
 Wed May 20 20:25:50 2009
@@ -118,6 +118,15 @@
   }
 
   @Test
+  public void extractNestedTagsVerbatim() throws Exception {
+    String xml = "<messagebundle><msg name='key'>This is <x>nested</x> 
content</msg>" +
+                 "</messagebundle>";
+    Element element = XmlUtil.parse(xml);
+    MessageBundle bundle = new MessageBundle(element);
+    assertEquals("This is <x>nested</x> content", 
bundle.getMessages().get("key"));
+  }
+
+  @Test
   public void merge() throws Exception {
     MessageBundle parent = new MessageBundle(XmlUtil.parse(PARENT_LOCALE));
     MessageBundle child = new MessageBundle(XmlUtil.parse(XML));


Reply via email to