johng       01/07/30 10:36:53

  Added:       java/src/org/apache/xalan/lib/sql DTMDocument.java
  Log:
  Added DTM Document, a common impl between SQLDocument and SQLErrorDocument
  Submitted by: John Gentilin
  
  Revision  Changes    Path
  1.1                  
xml-xalan/java/src/org/apache/xalan/lib/sql/DTMDocument.java
  
  Index: DTMDocument.java
  ===================================================================
  /**
   * @(#) SQLDocument.java
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   * not be used to endorse or promote products derived from this
   * software without prior written permission. For written
   * permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * nor may "Apache" appear in their name, without prior written
   * permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, Lotus
   * Development Corporation., http://www.lotus.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.xalan.lib.sql;
  
  import org.apache.xml.dtm.DTMManager;
  import org.apache.xml.dtm.DTMWSFilter;
  import org.apache.xml.dtm.ref.DTMDefaultBaseIterators;
  import org.apache.xml.dtm.DTM;
  import org.apache.xml.dtm.DTMAxisTraverser;
  import org.apache.xml.dtm.DTMAxisIterator;
  
  
  import org.apache.xml.utils.XMLString;
  import org.apache.xml.utils.XMLStringFactory;
  import org.apache.xml.utils.SuballocatedIntVector;
  import org.w3c.dom.Node;
  
  import org.xml.sax.ext.DeclHandler;
  import org.xml.sax.ErrorHandler;
  import org.xml.sax.DTDHandler;
  import org.xml.sax.EntityResolver;
  import org.xml.sax.ext.LexicalHandler;
  import org.xml.sax.ContentHandler;
  
  // Needed for our version of dumpDTM
  import java.io.IOException;
  import java.io.File;
  import java.io.PrintStream;
  import java.io.FileOutputStream;
  
  /**
   * The SQL Document is the main controlling class the executesa SQL Query
   */
  public class DTMDocument extends DTMDefaultBaseIterators
  {
  
    public interface CharacterNodeHandler
    {
      public void characters(Node node)
              throws org.xml.sax.SAXException;
    }
  
    private boolean DEBUG = false;
  
    protected static final String S_NAMESPACE = 
"http://xml.apache.org/xalan/SQLExtension";;
  
    protected static final String S_ATTRIB_NOT_SUPPORTED="Not Supported";
    protected static final String S_ISTRUE="true";
    protected static final String S_ISFALSE="false";
  
    protected static final String S_DOCUMENT = "#root";
    protected static final String S_TEXT_NODE = "#text";
    protected static final String S_ELEMENT_NODE   = "#element";
  
    protected int         m_Document_TypeID = 0;
    protected int         m_TextNode_TypeID = 0;
  
  
    /**
     * Store the SQL Data in this growable array
     */
    protected ObjectArray m_ObjectArray = new ObjectArray();
  
    /**
     * For each element node, there can be zero or more attributes. If 
Attributes
     * are assigned, the first attribute for that element will be use here.
     * Subsequent elements will use the m_nextsib, m_prevsib array. The sibling
     * arrays are not meeant to hold indexes to attribute information but as
     * long as there is not direct connection back into the main DTM tree
     * we should be OK.
     */
    protected SuballocatedIntVector m_attribute;
  
    /**
     * The Document Index will most likely be 0, but we will reference it
     * by variable in case that paradigm falls through.
     */
    protected int       m_DocumentIdx;
  
  
    public DTMDocument(DTMManager mgr, int ident)
    {
      super(mgr, null, ident,
        null, mgr.getXMLStringFactory(), true);
  
      m_attribute = new SuballocatedIntVector(m_initialblocksize);
    }
  
    /**
     * A common routine that allocates an Object from the Object Array.
     * One of the common bugs in this code was to allocate an Object and
     * not incerment m_size, using this method will assure that function.
     */
    private int allocateNodeObject(Object o)
    {
      // Need to keep this counter going even if we don't use it.
      m_size++;
      return m_ObjectArray.append(o);
    }
  
    protected int addElementWithData(Object o, int level, int extendedType, int 
parent, int prevsib)
    {
      int elementIdx = addElement(level,extendedType,parent,prevsib);
  
      int data = allocateNodeObject(o);
      m_firstch.setElementAt(data,elementIdx);
  
      m_exptype.setElementAt(m_TextNode_TypeID, data);
      // m_level.setElementAt((byte)(level), data);
      m_parent.setElementAt(elementIdx, data);
  
      m_prevsib.setElementAt(DTM.NULL, data);
      m_nextsib.setElementAt(DTM.NULL, data);
      m_attribute.setElementAt(DTM.NULL, data);
      m_firstch.setElementAt(DTM.NULL, data);
  
      return elementIdx;
    }
  
    protected int addElement(int level, int extendedType, int parent, int 
prevsib)
    {
      int node = DTM.NULL;
  
      try
      {
        // Add the Node and adjust its Extended Type
        node = allocateNodeObject(S_ELEMENT_NODE);
  
        m_exptype.setElementAt(extendedType, node);
        m_nextsib.setElementAt(DTM.NULL, node);
        m_prevsib.setElementAt(prevsib, node);
  
        m_parent.setElementAt(parent, node);
        m_firstch.setElementAt(DTM.NULL, node);
        // m_level.setElementAt((byte)level, node);
        m_attribute.setElementAt(DTM.NULL, node);
  
        if (prevsib != DTM.NULL)
        {
          // If the previous sibling is already assigned, then we are
          // inserting a value into the chain.
          if (m_nextsib.elementAt(prevsib) != DTM.NULL)
            m_nextsib.setElementAt(m_nextsib.elementAt(prevsib), node);
  
          // Tell the proevious sibling that they have a new bother/sister.
          m_nextsib.setElementAt(node, prevsib);
        }
  
         // So if we have a valid parent and the new node ended up being first
        // in the list, i.e. no prevsib, then set the new node up as the
        // first child of the parent. Since we chained the node in the list,
        // there should be no reason to worry about the current first child
        // of the parent node.
        if ((parent != DTM.NULL) && (m_prevsib.elementAt(node) == DTM.NULL))
        {
          m_firstch.setElementAt(node, parent);
        }
      }
      catch(Exception e)
      {
        error("Error in addElement: "+e.getMessage());
      }
  
      return node;
    }
  
    /**
     * Link an attribute to a node, if the node already has one or more
     * attributes assigned, then just link this one to the attribute list.
     * The first attribute is attached to the Parent Node (pnode) through the
     * m_attribute array, subsequent attributes are linked through the
     * m_prevsib, m_nextsib arrays.
     *
     */
    protected int addAttributeToNode(
      Object o, int extendedType, int pnode)
    {
      int attrib = DTM.NULL;
      int prevsib = DTM.NULL;
      int lastattrib = DTM.NULL;
      int value = DTM.NULL;
  
      try
      {
        // Add the Node and adjust its Extended Type
        attrib = allocateNodeObject(o);
  
        m_attribute.setElementAt(DTM.NULL, attrib);
        m_exptype.setElementAt(extendedType, attrib);
        // m_level.setElementAt((byte)0, attrib);
  
        // Clear the sibling references
        m_nextsib.setElementAt(DTM.NULL, attrib);
        m_prevsib.setElementAt(DTM.NULL,attrib);
        // Set the parent, although the was we are using attributes
        // in the SQL extension this reference will more than likly
        // be wrong
        m_parent.setElementAt(pnode, attrib);
        m_firstch.setElementAt(DTM.NULL, attrib);
  
        if (m_attribute.elementAt(pnode) != DTM.NULL)
        {
          // OK, we already have an attribute assigned to this
          // Node, Insert us into the head of the list.
          lastattrib = m_attribute.elementAt(pnode);
          m_nextsib.setElementAt(lastattrib, attrib);
          m_prevsib.setElementAt(attrib, lastattrib);
        }
        // Okay set the new attribute up as the first attribute
        // for the node.
        m_attribute.setElementAt(attrib, pnode);
      }
      catch(Exception e)
      {
        error("Error in addAttributeToNode: "+e.getMessage());
      }
  
      return attrib;
    }
  
    /**
     * Allow two nodes to share the same set of attributes. There may be some
     * problems because the parent of any attribute will be the original node
     * they were assigned to. Need to see how the attribute walker works, then
     * we should be able to fake it out.
     */
    protected void cloneAttributeFromNode(int toNode, int fromNode)
    {
     try
      {
        if (m_attribute.elementAt(toNode) != DTM.NULL)
        {
          error("Cloneing Attributes, where from Node already had addtibures 
assigned");
        }
  
        m_attribute.setElementAt(m_attribute.elementAt(fromNode), toNode);
      }
      catch(Exception e)
      {
        error("Cloning attributes");
      }
    }
  
  
    public int getFirstAttribute(int parm1)
    {
      if (DEBUG) System.out.println("getFirstAttribute("+ 
(parm1&NODEIDENTITYBITS)+")");
      int nodeIdx = parm1 & NODEIDENTITYBITS;
      if (nodeIdx != DTM.NULL) return m_attribute.elementAt(nodeIdx) | 
m_dtmIdent;
      else return DTM.NULL;
    }
  
   /**
     * @param parm1
     * @return
     */
    public String getNodeValue( int parm1 )
    {
      if (DEBUG) System.out.println("getNodeValue(" + parm1 + ")");
      try
      {
        Object o = m_ObjectArray.getAt(parm1 & NODEIDENTITYBITS);
        if (o != null)
        {
          return o.toString();
        }
        else
        {
          return "";
        }
      }
      catch(Exception e)
      {
        error("Getting String Value");
        return null;
      }
    }
  
  
    /**
     * @param parm1
     * @return
     */
    public XMLString getStringValue( int parm1 )
    {
      if (DEBUG) System.out.println("getStringValue(" + parm1 + ")");
      try
      {
        Object o = m_ObjectArray.getAt(parm1 & NODEIDENTITYBITS);
        if (o != null)
        {
          return m_xstrf.newstr(o.toString());
        }
        else
        {
          return m_xstrf.emptystr();
        }
      }
      catch(Exception e)
      {
        error("Getting String Value");
        return null;
      }
    }
  
  
    public int getNextAttribute(int parm1)
    {
      if (DEBUG) System.out.println("getNextAttribute(" + parm1 + ")");
      int nodeIdx = parm1 & NODEIDENTITYBITS;
      if (nodeIdx != DTM.NULL) return m_nextsib.elementAt(nodeIdx) | m_dtmIdent;
      else return DTM.NULL;
    }
  
  
    /**
     * @return
     */
    protected int getNumberOfNodes( )
    {
      if (DEBUG) System.out.println("getNumberOfNodes()");
      return m_size;
    }
  
    /**
     * @return
     */
    protected boolean nextNode( )
    {
      if (DEBUG) System.out.println("nextNode()");
      return false;
    }
  
  
    public void dumpDTM()
    {
      try
      {
  //      File f = new File("DTMDump"+((Object)this).hashCode()+".txt");
        File f = new File("DTMDump.txt");
        System.err.println("Dumping... "+f.getAbsolutePath());
        PrintStream ps = new PrintStream(new FileOutputStream(f));
  
        while (nextNode()){}
  
        int nRecords = m_size;
  
        ps.println("Total nodes: " + nRecords);
  
        for (int i = 0; i < nRecords; i++)
        {
          ps.println("=========== " + i + " ===========");
          ps.println("NodeName: " + getNodeName(i));
          ps.println("NodeNameX: " + getNodeNameX(i));
          ps.println("LocalName: " + getLocalName(i));
          ps.println("NamespaceURI: " + getNamespaceURI(i));
          ps.println("Prefix: " + getPrefix(i));
  
          int exTypeID = getExpandedTypeID(i);
  
          ps.println("Expanded Type ID: "
                             + Integer.toHexString(exTypeID));
  
          int type = getNodeType(i);
          String typestring;
  
          switch (type)
          {
          case DTM.ATTRIBUTE_NODE :
            typestring = "ATTRIBUTE_NODE";
            break;
          case DTM.CDATA_SECTION_NODE :
            typestring = "CDATA_SECTION_NODE";
            break;
          case DTM.COMMENT_NODE :
            typestring = "COMMENT_NODE";
            break;
          case DTM.DOCUMENT_FRAGMENT_NODE :
            typestring = "DOCUMENT_FRAGMENT_NODE";
            break;
          case DTM.DOCUMENT_NODE :
            typestring = "DOCUMENT_NODE";
            break;
          case DTM.DOCUMENT_TYPE_NODE :
            typestring = "DOCUMENT_NODE";
            break;
          case DTM.ELEMENT_NODE :
            typestring = "ELEMENT_NODE";
            break;
          case DTM.ENTITY_NODE :
            typestring = "ENTITY_NODE";
            break;
          case DTM.ENTITY_REFERENCE_NODE :
            typestring = "ENTITY_REFERENCE_NODE";
            break;
          case DTM.NAMESPACE_NODE :
            typestring = "NAMESPACE_NODE";
            break;
          case DTM.NOTATION_NODE :
            typestring = "NOTATION_NODE";
            break;
          case DTM.NULL :
            typestring = "NULL";
            break;
          case DTM.PROCESSING_INSTRUCTION_NODE :
            typestring = "PROCESSING_INSTRUCTION_NODE";
            break;
          case DTM.TEXT_NODE :
            typestring = "TEXT_NODE";
            break;
          default :
            typestring = "Unknown!";
            break;
          }
  
          ps.println("Type: " + typestring);
  
          int firstChild = _firstch(i);
  
          if (DTM.NULL == firstChild)
            ps.println("First child: DTM.NULL");
          else if (NOTPROCESSED == firstChild)
            ps.println("First child: NOTPROCESSED");
          else
            ps.println("First child: " + firstChild);
  
          int prevSibling = _prevsib(i);
  
          if (DTM.NULL == prevSibling)
            ps.println("Prev sibling: DTM.NULL");
          else if (NOTPROCESSED == prevSibling)
            ps.println("Prev sibling: NOTPROCESSED");
          else
            ps.println("Prev sibling: " + prevSibling);
  
          int nextSibling = _nextsib(i);
  
          if (DTM.NULL == nextSibling)
            ps.println("Next sibling: DTM.NULL");
          else if (NOTPROCESSED == nextSibling)
            ps.println("Next sibling: NOTPROCESSED");
          else
            ps.println("Next sibling: " + nextSibling);
  
          int parent = _parent(i);
  
          if (DTM.NULL == parent)
            ps.println("Parent: DTM.NULL");
          else if (NOTPROCESSED == parent)
            ps.println("Parent: NOTPROCESSED");
          else
            ps.println("Parent: " + parent);
  
          int level = _level(i);
  
          ps.println("Level: " + level);
          ps.println("Node Value: " + getNodeValue(i));
          ps.println("String Value: " + getStringValue(i));
  
          ps.println("First Attribute Node: " + m_attribute.elementAt(i));
        }
  
      }
      catch(IOException ioe)
      {
        ioe.printStackTrace(System.err);
        System.exit(-1);
      }
    }
  
  
    /**
     * Retrieve the text content of a DOM subtree, appending it into a
     * user-supplied FastStringBuffer object. Note that attributes are
     * not considered part of the content of an element.
     * <p>
     * There are open questions regarding whitespace stripping.
     * Currently we make no special effort in that regard, since the standard
     * DOM doesn't yet provide DTD-based information to distinguish
     * whitespace-in-element-context from genuine #PCDATA. Note that we
     * should probably also consider xml:space if/when we address this.
     * DOM Level 3 may solve the problem for us.
     * <p>
     * %REVIEW% Note that as a DOM-level operation, it can be argued that this
     * routine _shouldn't_ perform any processing beyond what the DOM already
     * does, and that whitespace stripping and so on belong at the DTM level.
     * If you want a stripped DOM view, wrap DTM2DOM around DOM2DTM.
     *
     * @param node Node whose subtree is to be walked, gathering the
     * contents of all Text or CDATASection nodes.
     * @param buf FastStringBuffer into which the contents of the text
     * nodes are to be concatenated.
     */
    protected static void dispatchNodeData(Node node,
                                           org.xml.sax.ContentHandler ch,
                                           int depth)
              throws org.xml.sax.SAXException
    {
  
      switch (node.getNodeType())
      {
      case Node.DOCUMENT_FRAGMENT_NODE :
      case Node.DOCUMENT_NODE :
      case Node.ELEMENT_NODE :
      {
        for (Node child = node.getFirstChild(); null != child;
                child = child.getNextSibling())
        {
          dispatchNodeData(child, ch, depth+1);
        }
      }
      break;
      case Node.PROCESSING_INSTRUCTION_NODE : // %REVIEW%
      case Node.COMMENT_NODE :
        if(0 != depth)
          break;
          // NOTE: Because this operation works in the DOM space, it does _not_ 
attempt
          // to perform Text Coalition. That should only be done in DTM space.
      case Node.TEXT_NODE :
      case Node.CDATA_SECTION_NODE :
      case Node.ATTRIBUTE_NODE :
        String str = node.getNodeValue();
        if(ch instanceof CharacterNodeHandler)
        {
          ((CharacterNodeHandler)ch).characters(node);
        }
        else
        {
          ch.characters(str.toCharArray(), 0, str.length());
        }
        break;
  //    /* case Node.PROCESSING_INSTRUCTION_NODE :
  //      // warning(XPATHErrorResources.WG_PARSING_AND_PREPARING);
  //      break; */
      default :
        // ignore
        break;
      }
    }
  
    /*********************************************************************/
    /*********************************************************************/
    /******************* End of Functions we Wrote ***********************/
    /*********************************************************************/
    /*********************************************************************/
  
  
    /**
     * For the moment all the run time properties are ignored by this
     * class.
     *
     * @param property a <code>String</code> value
     * @param value an <code>Object</code> value
     */
    public void setProperty(String property, Object value)
    {
    }
  
    /**
     * No source information is available for DOM2DTM, so return
     * <code>null</code> here.
     *
     * @param node an <code>int</code> value
     * @return null
     */
    public javax.xml.transform.SourceLocator getSourceLocatorFor(int node)
    {
      return null;
    }
  
    /**
     * @param parm1
     * @return
     */
    protected int getNextNodeIdentity( int parm1 )
    {
      if (DEBUG) System.out.println("getNextNodeIdenty(" + parm1 + ")");
      return DTM.NULL;
    }
  
    /**
     * @param parm1
     * @param parm2
     * @param parm3
     * @return
     */
    public int getAttributeNode( int parm1, String parm2, String parm3 )
    {
      if (DEBUG)
      {
        System.out.println(
          "getAttributeNode(" +
          parm1 + "," +
          parm2 + "," +
          parm3 + ")");
      }
      return DTM.NULL;
    }
  
    /**
     * @param parm1
     * @return
     */
    public String getLocalName( int parm1 )
    {
      int exID = this.getExpandedTypeID( parm1 & NODEIDENTITYBITS );
  
      if (DEBUG)
      {
        DEBUG = false;
        System.out.print("getLocalName(" + parm1 + ") -> ");
        System.out.println("..." + getLocalNameFromExpandedNameID(exID) );
        DEBUG = true;
      }
  
      return getLocalNameFromExpandedNameID(exID);
    }
  
    /**
     * @param parm1
     * @return
     */
    public String getNodeName( int parm1 )
    {
      int exID = this.getExpandedTypeID( parm1 & NODEIDENTITYBITS );
      if (DEBUG)
      {
        DEBUG = false;
        System.out.print("getLocalName(" + parm1 + ") -> ");
        System.out.println("..." + getLocalNameFromExpandedNameID(exID) );
        DEBUG = true;
      }
      return getLocalNameFromExpandedNameID(exID);
    }
  
     /**
     * @param parm1
     * @return
     */
    public boolean isAttributeSpecified( int parm1 )
    {
      if (DEBUG) System.out.println("isAttributeSpecified(" + parm1 + ")");
      return false;
    }
  
    /**
     * @param parm1
     * @return
     */
    public String getUnparsedEntityURI( String parm1 )
    {
      if (DEBUG) System.out.println("getUnparsedEntityURI(" + parm1 + ")");
      return "";
    }
  
    /**
     * @return
     */
    public DTDHandler getDTDHandler( )
    {
      if (DEBUG) System.out.println("getDTDHandler()");
      return null;
    }
  
    /**
     * @param parm1
     * @return
     */
    public String getPrefix( int parm1 )
    {
      if (DEBUG) System.out.println("getPrefix(" + parm1  + ")");
      return "";
    }
  
    /**
     * @return
     */
    public EntityResolver getEntityResolver( )
    {
      if (DEBUG) System.out.println("getEntityResolver()");
      return null;
    }
  
    /**
     * @return
     */
    public String getDocumentTypeDeclarationPublicIdentifier( )
    {
      if (DEBUG) System.out.println("get_DTD_PubId()");
      return "";
    }
  
    /**
     * @return
     */
    public LexicalHandler getLexicalHandler( )
    {
      if (DEBUG) System.out.println("getLexicalHandler()");
      return null;
    }
    /**
     * @return
     */
    public boolean needsTwoThreads( )
    {
      if (DEBUG) System.out.println("needsTwoThreads()");
      return false;
    }
  
    /**
     * @return
     */
    public ContentHandler getContentHandler( )
    {
      if (DEBUG) System.out.println("getContentHandler()");
      return null;
    }
  
    /**
     * @param parm1
     * @param parm2
     * @return
     * @throws org.xml.sax.SAXException
     */
    public void dispatchToEvents( int parm1, ContentHandler parm2 )
      throws org.xml.sax.SAXException
    {
      if (DEBUG)
      {
        System.out.println(
        "dispathcToEvents(" +
        parm1 + "," +
        parm2 + ")");
      }
      return;
    }
  
    /**
     * @param parm1
     * @return
     */
    public String getNamespaceURI( int parm1 )
    {
      if (DEBUG) System.out.println("getNamespaceURI(" +parm1+")");
      return "";
    }
  
    /**
     * @param parm1
     * @param parm2
     * @param parm3
     * @return
     * @throws org.xml.sax.SAXException
     */
    public void dispatchCharactersEvents(
            int nodeHandle, org.xml.sax.ContentHandler ch,
            boolean normalize)
              throws org.xml.sax.SAXException
    {
      if (DEBUG)
      {
        System.out.println("dispatchCharacterEvents(" +
        nodeHandle + "," +
        ch + "," +
        normalize + ")");
      }
  
      if(normalize)
      {
        XMLString str = getStringValue(nodeHandle);
        str = str.fixWhiteSpace(true, true, false);
        str.dispatchCharactersEvents(ch);
      }
      else
      {
        int type = getNodeType(nodeHandle);
        Node node = getNode(nodeHandle);
        dispatchNodeData(node, ch, 0);
      }
    }
  
    /**
     * Event overriding for Debug
     */
  
    public boolean supportsPreStripping()
    {
      if (DEBUG) System.out.println("supportsPreStripping()");
      return super.supportsPreStripping();
    }
  
    protected int _exptype(int parm1)
    {
      if (DEBUG) System.out.println("_exptype(" + parm1 + ")");
      return super._exptype( parm1);
    }
  
    protected SuballocatedIntVector findNamespaceContext(int parm1)
    {
      if (DEBUG) System.out.println("SuballocatedIntVector(" + parm1 + ")");
      return super.findNamespaceContext( parm1);
    }
  
    protected int _prevsib(int parm1)
    {
      if (DEBUG) System.out.println("_prevsib(" + parm1+ ")");
      return super._prevsib( parm1);
    }
  
  
    protected short _type(int parm1)
    {
      if (DEBUG) System.out.println("_type(" + parm1 + ")");
      return super._type( parm1);
    }
  
    public Node getNode(int parm1)
    {
      if (DEBUG) System.out.println("getNode(" + parm1 + ")");
      return super.getNode( parm1);
    }
  
    public int getPreviousSibling(int parm1)
    {
      if (DEBUG) System.out.println("getPrevSib(" + parm1 + ")");
      return super.getPreviousSibling( parm1);
    }
  
    public String getDocumentStandalone(int parm1)
    {
      if (DEBUG) System.out.println("getDOcStandAlone(" + parm1 + ")");
      return super.getDocumentStandalone( parm1);
    }
  
    public String getNodeNameX(int parm1)
    {
      if (DEBUG) System.out.println("getNodeNameX(" + parm1 + ")");
      //return super.getNodeNameX( parm1);
      return getNodeName(parm1);
  
    }
  
    public void setFeature(String parm1, boolean parm2)
    {
      if (DEBUG)
      {
        System.out.println(
          "setFeature(" +
          parm1 + "," +
          parm2 + ")");
      }
      super.setFeature( parm1,  parm2);
    }
  
    protected int _parent(int parm1)
    {
      if (DEBUG) System.out.println("_parent(" + parm1 + ")");
      return super._parent( parm1);
    }
  
    protected void indexNode(int parm1, int parm2)
    {
      if (DEBUG) System.out.println("indexNode("+parm1+","+parm2+")");
      super.indexNode( parm1,  parm2);
    }
  
    protected boolean getShouldStripWhitespace()
    {
      if (DEBUG) System.out.println("getShouldStripWS()");
      return super.getShouldStripWhitespace();
    }
  
    protected void popShouldStripWhitespace()
    {
      if (DEBUG) System.out.println("popShouldStripWS()");
      super.popShouldStripWhitespace();
    }
  
    public boolean isNodeAfter(int parm1, int parm2)
    {
      if (DEBUG) System.out.println("isNodeAfter(" + parm1 + "," + parm2 + ")");
      return super.isNodeAfter( parm1,  parm2);
    }
  
    public int getNamespaceType(int parm1)
    {
      if (DEBUG) System.out.println("getNamespaceType(" + parm1 + ")");
      return super.getNamespaceType( parm1);
    }
  
    protected int _level(int parm1)
    {
      if (DEBUG) System.out.println("_level(" + parm1 + ")");
      return super._level( parm1);
    }
  
  
    protected void pushShouldStripWhitespace(boolean parm1)
    {
      if (DEBUG) System.out.println("push_ShouldStripWS(" + parm1 + ")");
      super.pushShouldStripWhitespace( parm1);
    }
  
    public String getDocumentVersion(int parm1)
    {
      if (DEBUG) System.out.println("getDocVer("+parm1+")");
      return super.getDocumentVersion( parm1);
    }
  
    public boolean isSupported(String parm1, String parm2)
    {
      if (DEBUG) System.out.println("isSupported("+parm1+","+parm2+")");
      return super.isSupported( parm1,  parm2);
    }
  
  
    protected void setShouldStripWhitespace(boolean parm1)
    {
      if (DEBUG) System.out.println("set_ShouldStripWS("+parm1+")");
      super.setShouldStripWhitespace( parm1);
    }
  
  
    protected void ensureSizeOfIndex(int parm1, int parm2)
    {
      if (DEBUG) System.out.println("ensureSizeOfIndex("+parm1+","+parm2+")");
      super.ensureSizeOfIndex( parm1,  parm2);
    }
  
    protected void ensureSize(int parm1)
    {
      if (DEBUG) System.out.println("ensureSize("+parm1+")");
  
      // IntVectors in DTMDefaultBase are now self-sizing, and ensureSize()
      // is being dropped.
      //super.ensureSize( parm1);
    }
  
    public String getDocumentEncoding(int parm1)
    {
      if (DEBUG) System.out.println("getDocumentEncoding("+parm1+")");
      return super.getDocumentEncoding( parm1);
    }
  
    public void appendChild(int parm1, boolean parm2, boolean parm3)
    {
      if (DEBUG)
      {
        System.out.println(
          "appendChild(" +
          parm1 + "," +
          parm2 + "," +
          parm3 + ")");
      }
      super.appendChild( parm1,  parm2,  parm3);
    }
  
    public short getLevel(int parm1)
    {
      if (DEBUG) System.out.println("getLevel("+parm1+")");
      return super.getLevel( parm1);
    }
  
    public String getDocumentBaseURI()
    {
      if (DEBUG) System.out.println("getDocBaseURI()");
      return super.getDocumentBaseURI();
    }
  
    public int getNextNamespaceNode(int parm1, int parm2, boolean parm3)
    {
      if (DEBUG)
      {
        System.out.println(
        "getNextNamesapceNode(" +
        parm1 + "," +
        parm2 + "," +
        parm3 + ")");
      }
      return super.getNextNamespaceNode( parm1,  parm2,  parm3);
    }
  
    public void appendTextChild(String parm1)
    {
      if (DEBUG) System.out.println("appendTextChild(" + parm1 + ")");
      super.appendTextChild( parm1);
    }
  
    protected int findGTE(int[] parm1, int parm2, int parm3, int parm4)
    {
      if (DEBUG)
      {
        System.out.println(
        "findGTE("+
        parm1 + "," +
        parm2 + "," +
        parm3 + ")");
      }
      return super.findGTE( parm1,  parm2,  parm3,  parm4);
    }
  
    public int getFirstNamespaceNode(int parm1, boolean parm2)
    {
      if (DEBUG) System.out.println("getFirstNamespaceNode()");
      return super.getFirstNamespaceNode( parm1,  parm2);
    }
  
    public int getStringValueChunkCount(int parm1)
    {
      if (DEBUG) System.out.println("getStringChunkCount(" + parm1 + ")");
      return super.getStringValueChunkCount( parm1);
    }
  
    public int getLastChild(int parm1)
    {
      if (DEBUG) System.out.println("getLastChild(" + parm1 + ")");
      return super.getLastChild( parm1);
    }
  
    public boolean hasChildNodes(int parm1)
    {
      if (DEBUG) System.out.println("hasChildNodes(" + parm1 + ")");
      return super.hasChildNodes( parm1);
    }
  
    public short getNodeType(int parm1)
    {
      if (DEBUG)
      {
        DEBUG=false;
        System.out.print("getNodeType(" + (parm1 & NODEIDENTITYBITS) + ") ");
        int exID = this.getExpandedTypeID( parm1 & NODEIDENTITYBITS );
        String name = getLocalNameFromExpandedNameID(exID);
        System.out.println(
          ".. Node name [" + name + "]" +
          "[" + getNodeType( parm1) + "]");
  
        DEBUG=true;
      }
  
      return super.getNodeType( parm1);
    }
  
    public boolean isCharacterElementContentWhitespace(int parm1)
    {
      if (DEBUG) System.out.println("isCharacterElementContentWhitespace(" + 
parm1 +")");
      return super.isCharacterElementContentWhitespace( parm1);
    }
  
    public int getFirstChild(int parm1)
    {
      if (DEBUG) System.out.println("getFirstChild(" + parm1 + ")");
      return super.getFirstChild( parm1);
    }
  
    public String getDocumentSystemIdentifier(int parm1)
    {
      if (DEBUG) System.out.println("getDocSysID(" + parm1 + ")");
      return super.getDocumentSystemIdentifier( parm1);
    }
  
    protected void declareNamespaceInContext(int parm1, int parm2)
    {
      if (DEBUG) 
System.out.println("declareNamespaceContext("+parm1+","+parm2+")");
      super.declareNamespaceInContext( parm1,  parm2);
    }
  
    public String getNamespaceFromExpandedNameID(int parm1)
    {
      if (DEBUG)
      {
        DEBUG = false;
        System.out.print("getNamespaceFromExpandedNameID("+parm1+")");
        System.out.println("..." + super.getNamespaceFromExpandedNameID( parm1) 
);
        DEBUG = true;
      }
      return super.getNamespaceFromExpandedNameID( parm1);
    }
  
    public String getLocalNameFromExpandedNameID(int parm1)
    {
      if (DEBUG)
      {
        DEBUG = false;
        System.out.print("getLocalNameFromExpandedNameID("+parm1+")");
        System.out.println("..." + super.getLocalNameFromExpandedNameID( 
parm1));
        DEBUG = true;
      }
      return super.getLocalNameFromExpandedNameID( parm1);
    }
  
    public int getExpandedTypeID(int parm1)
    {
      if (DEBUG) System.out.println("getExpandedTypeID("+parm1+")");
      return super.getExpandedTypeID( parm1);
    }
  
    public int getDocument()
    {
      if (DEBUG) System.out.println("getDocument()");
      return super.getDocument();
    }
  
  
    protected int findInSortedSuballocatedIntVector(SuballocatedIntVector 
parm1, int parm2)
    {
      if (DEBUG)
      {
        System.out.println(
        "findInSortedSubAlloctedVector(" +
        parm1 + "," +
        parm2 + ")");
      }
      return super.findInSortedSuballocatedIntVector( parm1,  parm2);
    }
  
    public boolean isDocumentAllDeclarationsProcessed(int parm1)
    {
      if (DEBUG) System.out.println("isDocumentAllDeclProc("+parm1+")");
      return super.isDocumentAllDeclarationsProcessed( parm1);
    }
  
    protected void error(String parm1)
    {
      if (DEBUG) System.out.println("error("+parm1+")");
      super.error( parm1);
    }
  
  
    protected int _firstch(int parm1)
    {
      if (DEBUG) System.out.println("_firstch("+parm1+")");
      return super._firstch( parm1);
    }
  
    public int getOwnerDocument(int parm1)
    {
      if (DEBUG) System.out.println("getOwnerDoc("+parm1+")");
      return super.getOwnerDocument( parm1);
    }
  
    protected int _nextsib(int parm1)
    {
      if (DEBUG) System.out.println("_nextSib("+parm1+")");
      return super._nextsib( parm1);
    }
  
    public int getNextSibling(int parm1)
    {
      if (DEBUG) System.out.println("getNextSibling("+parm1+")");
      return super.getNextSibling( parm1);
    }
  
  
    public boolean getDocumentAllDeclarationsProcessed()
    {
      if (DEBUG) System.out.println("getDocAllDeclProc()");
      return super.getDocumentAllDeclarationsProcessed();
    }
  
    public int getParent(int parm1)
    {
      if (DEBUG) System.out.println("getParent("+parm1+")");
      return super.getParent( parm1);
    }
  
    public int getExpandedTypeID(String parm1, String parm2, int parm3)
    {
      if (DEBUG) System.out.println("getExpandedTypeID()");
      return super.getExpandedTypeID( parm1,  parm2,  parm3);
    }
  
    public void setDocumentBaseURI(String parm1)
    {
      if (DEBUG) System.out.println("setDocBaseURI()");
      super.setDocumentBaseURI( parm1);
    }
  
    public char[] getStringValueChunk(int parm1, int parm2, int[] parm3)
    {
      if (DEBUG)
      {
        System.out.println("getStringChunkValue(" +
        parm1 + "," +
        parm2 + ")");
      }
      return super.getStringValueChunk( parm1,  parm2,  parm3);
    }
  
    public DTMAxisTraverser getAxisTraverser(int parm1)
    {
      if (DEBUG) System.out.println("getAxixTraverser("+parm1+")");
      return super.getAxisTraverser( parm1);
    }
  
    public DTMAxisIterator getTypedAxisIterator(int parm1, int parm2)
    {
      if (DEBUG) 
System.out.println("getTypedAxisIterator("+parm1+","+parm2+")");
      return super.getTypedAxisIterator( parm1,  parm2);
    }
  
    public DTMAxisIterator getAxisIterator(int parm1)
    {
      if (DEBUG) System.out.println("getAxisIterator("+parm1+")");
      return super.getAxisIterator( parm1);
    }
    /**
     * @param parm1
     * @return
     */
    public int getElementById( String parm1 )
    {
      if (DEBUG) System.out.println("getElementByID("+parm1+")");
      return DTM.NULL;
    }
  
    /**
     * @return
     */
    public DeclHandler getDeclHandler( )
    {
      if (DEBUG) System.out.println("getDeclHandler()");
      return null;
    }
  
    /**
     * @return
     */
    public ErrorHandler getErrorHandler( )
    {
      if (DEBUG) System.out.println("getErrorHandler()");
      return null;
    }
  
    /**
     * @return
     */
    public String getDocumentTypeDeclarationSystemIdentifier( )
    {
      if (DEBUG) System.out.println("get_DTD-SID()");
      return null;
    }
  
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to