dims        01/01/03 07:38:28

  Modified:    src/org/apache/cocoon/components/language/markup/xsp Tag:
                        xml-cocoon2 XSPObjectHelper.java
               src/org/apache/cocoon/components/language/markup/xsp/java
                        Tag: xml-cocoon2 xsp.xsl
               src/org/apache/cocoon/xml/dom Tag: xml-cocoon2
                        DOMStreamer.java
  Added:       src/org/apache/cocoon/xml Tag: xml-cocoon2 XMLFragment.java
  Log:
  Patch from Sylvain Wallez <[EMAIL PROTECTED]> - "[C2][Patch] XMLFragment 
(again)"
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.7   +220 -2    
xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/Attic/XSPObjectHelper.java
  
  Index: XSPObjectHelper.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/Attic/XSPObjectHelper.java,v
  retrieving revision 1.1.2.6
  retrieving revision 1.1.2.7
  diff -u -r1.1.2.6 -r1.1.2.7
  --- XSPObjectHelper.java      2000/12/08 20:39:04     1.1.2.6
  +++ XSPObjectHelper.java      2001/01/03 15:38:02     1.1.2.7
  @@ -7,19 +7,28 @@
    
*****************************************************************************/
   package org.apache.cocoon.components.language.markup.xsp;
   
  +import java.util.Collection;
  +import java.util.Iterator;
  +
   import org.xml.sax.ContentHandler;
   import org.xml.sax.helpers.AttributesImpl;
  -
   import org.xml.sax.SAXException;
   
  +import org.w3c.dom.Node;
  +
   import org.apache.log.Logger;
   import org.apache.log.LogKit;
   
  +import org.apache.cocoon.xml.XMLFragment;
  +import org.apache.cocoon.xml.dom.DOMStreamer;
  +
   /**
    * Base class for XSP's object model manipulation logicsheets
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.6 $ $Date: 2000/12/08 20:39:04 $
  + * @author <a href="[EMAIL PROTECTED]">Sylvain Wallez</a>
  + *         (Cocoon1 <code>xspExpr()</code> methods port)
  + * @version CVS $Revision: 1.1.2.7 $ $Date: 2001/01/03 15:38:02 $
    */
   public class XSPObjectHelper {
     /**
  @@ -153,5 +162,214 @@
       throws SAXException
     {
       contentHandler.characters(data.toCharArray(), 0, data.length());
  +  }
  +
  +  // <xsp:expr> methods
  +  
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>char</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, char v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>byte</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, byte v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>boolean</code> :
  +   * outputs characters representing the value (true / false).
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, boolean v) 
throws SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>int</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, int v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>long</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, long v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>long</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, float v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>double</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, double v) throws 
SAXException
  +  {
  +    data(contentHandler, String.valueOf(v));
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>String</code> :
  +   * outputs characters representing the value.
  +   *
  +   * @param contentHandler the SAX content handler
  +   * @param v the value
  +   */
  +  public static void xspExpr(ContentHandler contentHandler, String text) 
throws SAXException
  +  {
  +    if (text != null)
  +    {
  +      data(contentHandler, text);
  +    }
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; for <code>XMLFragment</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 xspExpr(ContentHandler contentHandler, XMLFragment v) 
throws SAXException
  +  {
  +    if (v != null)
  +    {
  +      v.toSAX(contentHandler);
  +    }
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; 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 xspExpr(ContentHandler contentHandler, Node v) throws 
SAXException
  +  {
  +    if (v != null)
  +    {
  +      DOMStreamer streamer = new DOMStreamer(contentHandler);
  +      streamer.stream(v);
  +    }
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; 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 xspExpr(ContentHandler contentHandler, Collection v) 
throws SAXException
  +  {
  +    if (v != null)
  +    {
  +      Iterator iterator = v.iterator();
  +      while (iterator.hasNext())
  +      {
  +             xspExpr(contentHandler, iterator.next());
  +      }
  +    }
  +  }
  +
  +  /**
  +   * Implementation of &lt;xsp:expr&gt; 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 xspExpr(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++)
  +      {
  +        xspExpr(contentHandler, elements[i]);
  +      }
  +      return;
  +    }
  +
  +    // Check handled object types in case they were not typed in the XSP
  +
  +    // XMLFragment
  +    if (v instanceof XMLFragment)
  +    {
  +      xspExpr(contentHandler, (XMLFragment)v);
  +      return;
  +    }
  +
  +    // Node
  +    if (v instanceof Node)
  +    {
  +      xspExpr(contentHandler, (Node)v);
  +      return;
  +    }
  +
  +    // Collection
  +    if (v instanceof Collection)
  +    {
  +      xspExpr(contentHandler, (Collection)v);
  +      return;
  +    }
  +
  +    // Give up: hope it's a string or has a meaningful string representation
  +    data(contentHandler, String.valueOf(v));
     }
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.19  +4 -3      
xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/xsp.xsl
  
  Index: xsp.xsl
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/xsp.xsl,v
  retrieving revision 1.1.2.18
  retrieving revision 1.1.2.19
  diff -u -r1.1.2.18 -r1.1.2.19
  --- xsp.xsl   2001/01/02 11:09:51     1.1.2.18
  +++ xsp.xsl   2001/01/03 15:38:11     1.1.2.19
  @@ -11,7 +11,7 @@
   
   <!--
    * @author <a href="mailto:[EMAIL PROTECTED]>Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.18 $ $Date: 2001/01/02 11:09:51 $
  + * @version CVS $Revision: 1.1.2.19 $ $Date: 2001/01/03 15:38:11 $
   -->
   
   <!-- XSP Core logicsheet for the Java language -->
  @@ -51,6 +51,7 @@
       import org.apache.cocoon.util.*;
   
       import org.apache.cocoon.components.language.markup.xsp.XSPGenerator;
  +    import org.apache.cocoon.components.language.markup.xsp.XSPObjectHelper;
       import org.apache.cocoon.components.language.markup.xsp.XSPRequestHelper;
       import 
org.apache.cocoon.components.language.markup.xsp.XSPResponseHelper;
   
  @@ -278,8 +279,8 @@
           (<xsl:value-of select="."/>)
         </xsl:when>
         <xsl:otherwise>
  -        <!-- Coerce to String and output as character data -->
  -        this.characters(String.valueOf(<xsl:value-of select="."/>));
  +        <!-- Output the value as elements or character data depending on its 
type -->
  +        XSPObjectHelper.xspExpr(contentHandler, <xsl:value-of select="."/>);
         </xsl:otherwise>
       </xsl:choose>
     </xsl:template>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +38 -0     
xml-cocoon/src/org/apache/cocoon/xml/Attic/XMLFragment.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.3   +4 -2      
xml-cocoon/src/org/apache/cocoon/xml/dom/Attic/DOMStreamer.java
  
  Index: DOMStreamer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/xml/dom/Attic/DOMStreamer.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- DOMStreamer.java  2000/12/08 20:41:03     1.1.2.2
  +++ DOMStreamer.java  2001/01/03 15:38:23     1.1.2.3
  @@ -37,7 +37,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
    *         (Apache Software Foundation, Exoffice Technologies)
  - * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/12/08 20:41:03 $
  + * @version CVS $Revision: 1.1.2.3 $ $Date: 2001/01/03 15:38:23 $
    */
   public class DOMStreamer extends AbstractXMLProducer {
   
  @@ -126,7 +126,9 @@
                       // Do nothing for ENTITY and NOTATION nodes
                       break;
                   case Node.DOCUMENT_FRAGMENT_NODE:
  -                    throw new SAXException("Unexpected Document Fragment 
node");
  +                    // Process all children
  +                    processChildren(n);
  +                    break;
                   case Node.ATTRIBUTE_NODE:
                       throw new SAXException("Unexpected Attribute node");
                   default:
  
  
  

Reply via email to