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