vgritsenko 2002/10/22 20:39:15 Modified: src/java/org/apache/cocoon/xml Tag: cocoon_2_0_3_branch XMLUtils.java Log: Add xsp:expr stuff to the XMLUtil (backported from 2.1) Revision Changes Path No revision No revision 1.6.2.2 +133 -4 xml-cocoon2/src/java/org/apache/cocoon/xml/XMLUtils.java Index: XMLUtils.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/xml/XMLUtils.java,v retrieving revision 1.6.2.1 retrieving revision 1.6.2.2 diff -u -r1.6.2.1 -r1.6.2.2 --- XMLUtils.java 11 Oct 2002 06:30:41 -0000 1.6.2.1 +++ XMLUtils.java 23 Oct 2002 03:39:15 -0000 1.6.2.2 @@ -53,21 +53,22 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.Properties; +import java.util.Collection; +import java.util.Iterator; -import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.NodeList; import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.xml.dom.DOMStreamer; import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.dom.DOMSource; @@ -244,4 +245,132 @@ } } + /** + * Add string data + * + * @param contentHandler The SAX content handler + * @param data The string data + */ + public static void data(ContentHandler contentHandler, + String data) + throws SAXException { + contentHandler.characters(data.toCharArray(), 0, data.length()); + } + + /** + * Implementation of <xsp:expr> for <code>String</code> : + * outputs characters representing the value. + * + * @param contentHandler the SAX content handler + * @param text the value + */ + public static void valueOf(ContentHandler contentHandler, String text) + throws SAXException { + if (text != null) { + data(contentHandler, text); + } + } + + /** + * Implementation of <xsp:expr> for <code>XMLizable</code> : + * outputs the value by calling <code>v.toSax(contentHandler)</code>. + * + * @param contentHandler the SAX content handler + * @param v the XML fragment + */ + public static void valueOf(ContentHandler contentHandler, XMLizable v) + throws SAXException { + if (v != null) { + try { + v.toSAX(contentHandler); + } catch(ProcessingException e) { + throw new SAXException(e); + } + } + } + + /** + * Implementation of <xsp:expr> for <code>org.w3c.dom.Node</code> : + * converts the Node to a SAX event stream. + * + * @param contentHandler the SAX content handler + * @param v the value + */ + public static void valueOf(ContentHandler contentHandler, Node v) + throws SAXException { + if (v != null) { + DOMStreamer streamer = new DOMStreamer(contentHandler); + streamer.stream(v); + } + } + + /** + * Implementation of <xsp:expr> for <code>java.util.Collection</code> : + * outputs the value by calling <code>xspExpr()</code> on each element of the + * collection. + * + * @param contentHandler the SAX content handler + * @param v the XML fragment + */ + public static void valueOf(ContentHandler contentHandler, + Collection v) + throws SAXException { + if (v != null) { + Iterator iterator = v.iterator(); + while (iterator.hasNext()) { + valueOf(contentHandler, iterator.next()); + } + } + } + + /** + * Implementation of <xsp:expr> for <code>Object</code> depending on its class : + * <ul> + * <li>if it's an array, call <code>xspExpr()</code> on all its elements,</li> + * <li>if it's class has a specific <code>xspExpr()</code>implementation, use it,</li> + * <li>else, output it's string representation.</li> + * </ul> + * + * @param contentHandler the SAX content handler + * @param v the value + */ + public static void valueOf(ContentHandler contentHandler, Object v) + throws SAXException { + if (v == null) { + return; + } + + // Array: recurse over each element + if (v.getClass().isArray()) { + Object[] elements = (Object[]) v; + + for (int i = 0; i < elements.length; i++) { + valueOf(contentHandler, elements[i]); + } + return; + } + + // Check handled object types in case they were not typed in the XSP + + // XMLizable + if (v instanceof XMLizable) { + valueOf(contentHandler, (XMLizable)v); + return; + } + + // Node + if (v instanceof Node) { + valueOf(contentHandler, (Node)v); + return; + } + + // Collection + if (v instanceof Collection) { + valueOf(contentHandler, (Collection)v); + return; + } + + // Give up: hope it's a string or has a meaningful string representation + data(contentHandler, String.valueOf(v)); + } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]