cziegeler 2002/09/23 05:03:27
Modified: src/java/org/apache/cocoon/xml/dom DOMUtil.java
src/java/org/apache/cocoon/webapps/session/context
RequestSessionContext.java
Log:
Better evaluation of request attributes for use in session contexts
Revision Changes Path
1.3 +120 -1 xml-cocoon2/src/java/org/apache/cocoon/xml/dom/DOMUtil.java
Index: DOMUtil.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/xml/dom/DOMUtil.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DOMUtil.java 19 Apr 2002 11:02:59 -0000 1.2
+++ DOMUtil.java 23 Sep 2002 12:03:27 -0000 1.3
@@ -52,6 +52,7 @@
import org.apache.excalibur.source.SourceParameters;
import org.apache.avalon.excalibur.xml.Parser;
+import org.apache.avalon.excalibur.xml.XMLizable;
import org.apache.avalon.excalibur.xml.xpath.XPathProcessor;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.xpath.XPathUtil;
@@ -61,6 +62,8 @@
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import java.io.*;
+import java.util.Collection;
+import java.util.Iterator;
/**
* This class is an utitity class for miscellaneous DOM functions, like
@@ -445,5 +448,121 @@
return ok;
}
+ /**
+ * Implementation for <code>String</code> :
+ * outputs characters representing the value.
+ *
+ * @param parent The node getting the value
+ * @param text the value
+ */
+ public static void valueOf(Node parent, String text)
+ throws ProcessingException {
+ if (text != null) {
+ parent.appendChild(parent.getOwnerDocument().createTextNode(text));
+ }
+ }
+
+ /**
+ * Implementation for <code>XMLizable</code> :
+ * outputs the value by calling <code>v.toSax(contentHandler)</code>.
+ *
+ * @param parent The node getting the value
+ * @param v the XML fragment
+ */
+ public static void valueOf(Node parent, XMLizable v)
+ throws ProcessingException {
+ if (v != null) {
+ DOMBuilder builder = new DOMBuilder(parent);
+ try {
+ v.toSAX(builder);
+ } catch(SAXException e) {
+ throw new ProcessingException(e);
+ }
+ }
+ }
+
+ /**
+ * Implementation for <code>org.w3c.dom.Node</code> :
+ * converts the Node to a SAX event stream.
+ *
+ * @param parent The node getting the value
+ * @param v the value
+ */
+ public static void valueOf(Node parent, Node v)
+ throws ProcessingException {
+ if (v != null) {
+ parent.appendChild(parent.getOwnerDocument().importNode(v, true));
+ }
+ }
+
+ /**
+ * Implementation for <code>java.util.Collection</code> :
+ * outputs the value by calling <code>xspExpr()</code> on each element of the
+ * collection.
+ *
+ * @param parent The node getting the value
+ * @param v the XML fragment
+ */
+ public static void valueOf(Node parent,
+ Collection v)
+ throws ProcessingException {
+ if (v != null) {
+ Iterator iterator = v.iterator();
+ while (iterator.hasNext()) {
+ valueOf(parent, iterator.next());
+ }
+ }
+ }
+
+ /**
+ * Implementation for <code>Object</code> depending on its class :
+ * <ul>
+ * <li>if it's an array, call {@link valueOf(Node, Object)} on all its
elements,</li>
+ * <li>if it's class has a specific {@link valueOf(Node, Object)}
implementation, use it,</li>
+ * <li>else, output it's string representation.</li>
+ * </ul>
+ *
+ * @param parent The node getting the value
+ * @param v the value
+ */
+ public static void valueOf(Node parent, Object v)
+ throws ProcessingException {
+ 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(parent, elements[i]);
+ }
+ return;
+ }
+
+ // Check handled object types in case they were not typed in the XSP
+
+ // XMLizable
+ if (v instanceof XMLizable) {
+ valueOf(parent, (XMLizable)v);
+ return;
+ }
+
+ // Node
+ if (v instanceof Node) {
+ valueOf(parent, (Node)v);
+ return;
+ }
+
+ // Collection
+ if (v instanceof Collection) {
+ valueOf(parent, (Collection)v);
+ return;
+ }
+
+ // Give up: hope it's a string or has a meaningful string representation
+ valueOf(parent, String.valueOf(v));
+ }
}
1.6 +6 -5
xml-cocoon2/src/java/org/apache/cocoon/webapps/session/context/RequestSessionContext.java
Index: RequestSessionContext.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/webapps/session/context/RequestSessionContext.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RequestSessionContext.java 30 Jul 2002 01:44:19 -0000 1.5
+++ RequestSessionContext.java 23 Sep 2002 12:03:27 -0000 1.6
@@ -66,6 +66,7 @@
import org.apache.cocoon.webapps.session.connector.Resource;
import org.apache.cocoon.webapps.session.xml.XMLUtil;
import org.apache.cocoon.xml.IncludeXMLConsumer;
+import org.apache.cocoon.xml.dom.DOMUtil;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
@@ -291,7 +292,7 @@
attrName = (String) all.nextElement();
attr = doc.createElementNS(null, attrName);
attrElement.appendChild(attr);
- attr.appendChild(this.createTextNode(doc,
this.request.getAttribute(attrName).toString()));
+ DOMUtil.valueOf(attr, this.request.getAttribute(attrName));
}
}
@@ -418,13 +419,13 @@
try {
// create "/parametervalues" entry
- element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "cocoon:param");
+ element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:param");
parameterValuesElement.appendChild(element);
parameter = element;
- element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "cocoon:name");
+ element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:name");
parameter.appendChild(element);
element.appendChild(doc.createTextNode(parameterName));
- element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "cocoon:value");
+ element =
doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:value");
parameter.appendChild(element);
element.appendChild(valueNode.cloneNode(true));
} catch (Exception local) {
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]