Author: adrianc
Date: Wed Jul  1 23:28:55 2009
New Revision: 790420

URL: http://svn.apache.org/viewvc?rev=790420&view=rev
Log:
Added a UEL function to convert a DOM Node to an HTML String.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java?rev=790420&r1=790419&r2=790420&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java 
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java 
Wed Jul  1 23:28:55 2009
@@ -18,6 +18,7 @@
  
*******************************************************************************/
 package org.ofbiz.base.util.string;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -32,6 +33,8 @@
 import java.util.TimeZone;
 
 import javax.el.FunctionMapper;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamSource;
 
 import javolution.util.FastMap;
 
@@ -142,6 +145,7 @@
  * <tr><td colspan="2"><b><code>dom:</code> contains 
<code>org.w3c.dom.*</code> functions</b></td></tr>
  * <tr><td><code>dom:readHtmlDocument(String)</code></td><td>Reads an HTML 
file and returns a <code>org.w3c.dom.Document</code> instance.</td></tr>
  * <tr><td><code>dom:readXmlDocument(String)</code></td><td>Reads an XML file 
and returns a <code>org.w3c.dom.Document</code> instance.</td></tr>
+ * <tr><td><code>dom:toHtmlString(Node, String encoding, boolean indent, int 
indentAmount)</code></td><td>Returns a <code>org.w3c.dom.Node</code> as an HTML 
<code>String</code>.</td></tr>
  * <tr><td><code>dom:toXmlString(Node, String encoding, boolean 
omitXmlDeclaration, boolean indent, int indentAmount)</code></td><td>Returns a 
<code>org.w3c.dom.Node</code> as an XML <code>String</code>.</td></tr>
  * <tr><td><code>dom:writeXmlDocument(String, Node, String encoding, boolean 
omitXmlDeclaration, boolean indent, int indentAmount)</code></td><td>Writes a 
<code>org.w3c.dom.Node</code> to an XML file and returns <code>true</code> if 
successful.</td></tr>
  * </table>
@@ -249,6 +253,7 @@
                 this.functionMap.put("util:urlExists", 
UelFunctions.class.getMethod("urlExists", String.class));
                 this.functionMap.put("dom:readHtmlDocument", 
UelFunctions.class.getMethod("readHtmlDocument", String.class));
                 this.functionMap.put("dom:readXmlDocument", 
UelFunctions.class.getMethod("readXmlDocument", String.class));
+                this.functionMap.put("dom:toHtmlString", 
UelFunctions.class.getMethod("toHtmlString", Node.class, String.class, 
boolean.class, int.class));
                 this.functionMap.put("dom:toXmlString", 
UelFunctions.class.getMethod("toXmlString", Node.class, String.class, 
boolean.class, boolean.class, int.class));
                 this.functionMap.put("dom:writeXmlDocument", 
UelFunctions.class.getMethod("writeXmlDocument", String.class, Node.class, 
String.class, boolean.class, boolean.class, int.class));
             } catch (Exception e) {
@@ -475,6 +480,37 @@
         return false;
     }
 
+    public static String toHtmlString(Node node, String encoding, boolean 
indent, int indentAmount) {
+        try {
+            StringBuilder sb = new StringBuilder();
+            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+            sb.append("<xsl:stylesheet 
xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"; 
xmlns:xalan=\"http://xml.apache.org/xslt\"; version=\"1.0\">\n");
+            sb.append("<xsl:output method=\"html\" encoding=\"");
+            sb.append(encoding == null ? "UTF-8" : encoding);
+            sb.append("\"");
+            sb.append(" indent=\"");
+            sb.append(indent ? "yes" : "no");
+            sb.append("\"");
+            if (indent) {
+                sb.append(" xalan:indent-amount=\"");
+                sb.append(indentAmount <= 0 ? 4 : indentAmount);
+                sb.append("\"");
+            }
+            sb.append("/>\n<xsl:template match=\"@*|node()\">\n");
+            sb.append("<xsl:copy><xsl:apply-templates 
select=\"@*|node()\"/></xsl:copy>\n");
+            sb.append("</xsl:template>\n</xsl:stylesheet>\n");
+            ByteArrayInputStream bis = new 
ByteArrayInputStream(sb.toString().getBytes());
+            TransformerFactory transformerFactory = 
TransformerFactory.newInstance();
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            UtilXml.transformDomDocument(transformerFactory.newTransformer(new 
StreamSource(bis)), node, os);
+            os.close();
+            return os.toString();
+        } catch (Exception e) {
+            Debug.logError(e, "Error while creating HTML String ", module);
+        }
+        return null;
+    }
+
     public static String toXmlString(Node node, String encoding, boolean 
omitXmlDeclaration, boolean indent, int indentAmount) {
         try {
             ByteArrayOutputStream os = new ByteArrayOutputStream();


Reply via email to