1. /**
  2. * @(#) SQLDocument.java
  3. *
  4. * The Apache Software License, Version 1.1
  5. *
  6. *
  7. * Copyright (c) 1999 The Apache Software Foundation. All rights
  8. * reserved.
  9. *
  10. * Redistribution and use in source and binary forms, with or without
  11. * modification, are permitted provided that the following conditions
  12. * are met:
  13. *
  14. * 1. Redistributions of source code must retain the above copyright
  15. * notice, this list of conditions and the following disclaimer.
  16. *
  17. * 2. Redistributions in binary form must reproduce the above copyright
  18. * notice, this list of conditions and the following disclaimer in
  19. * the documentation and/or other materials provided with the
  20. * distribution.
  21. *
  22. * 3. The end-user documentation included with the redistribution,
  23. * if any, must include the following acknowledgment:
  24. * "This product includes software developed by the
  25. * Apache Software Foundation (http://www.apache.org/)."
  26. * Alternately, this acknowledgment may appear in the software itself,
  27. * if and wherever such third-party acknowledgments normally appear.
  28. *
  29. * 4. The names "Xalan" and "Apache Software Foundation" must
  30. * not be used to endorse or promote products derived from this
  31. * software without prior written permission. For written
  32. * permission, please contact apache@apache.org.
  33. *
  34. * 5. Products derived from this software may not be called "Apache",
  35. * nor may "Apache" appear in their name, without prior written
  36. * permission of the Apache Software Foundation.
  37. *
  38. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  39. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  40. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  41. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  42. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  43. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  44. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  45. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  46. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  47. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  48. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  49. * SUCH DAMAGE.
  50. * ====================================================================
  51. *
  52. * This software consists of voluntary contributions made by many
  53. * individuals on behalf of the Apache Software Foundation and was
  54. * originally based on software copyright (c) 1999, Lotus
  55. * Development Corporation., http://www.lotus.com. For more
  56. * information on the Apache Software Foundation, please see
  57. * <http://www.apache.org/>.
  58. *
  59. */
  60. package org.apache.xalan.lib.sql;
  61. import org.apache.xml.dtm.DTMManager;
  62. import org.apache.xml.dtm.DTMWSFilter;
  63. import org.apache.xml.dtm.ref.DTMDefaultBaseIterators;
  64. import org.apache.xml.dtm.DTM;
  65. import org.apache.xml.dtm.DTMAxisTraverser;
  66. import org.apache.xml.dtm.DTMAxisIterator;
  67. import org.apache.xml.utils.XMLString;
  68. import org.apache.xml.utils.XMLStringFactory;
  69. import org.apache.xml.utils.SuballocatedIntVector;
  70. import org.w3c.dom.Node;
  71. import org.xml.sax.ext.DeclHandler;
  72. import org.xml.sax.ErrorHandler;
  73. import org.xml.sax.DTDHandler;
  74. import org.xml.sax.EntityResolver;
  75. import org.xml.sax.ext.LexicalHandler;
  76. import org.xml.sax.ContentHandler;
  77. import java.io.IOException;
  78. import java.io.File;
  79. import java.io.PrintStream;
  80. import java.io.FileOutputStream;
  81. import org.xml.sax.*;
  82. import javax.xml.transform.SourceLocator;
  83. import org.apache.xml.utils.*;
  84. import org.apache.xml.dtm.*;
  85. import org.xml.sax.ext.*;
  86. /**
  87. * The SQL Document is the main controlling class the executesa SQL Query
  88. */
  89. public class DTMDocument extends DTMDefaultBaseIterators
  90. {
  91. /**
  92. */
  93. public interface CharacterNodeHandler
  94. {
  95. /**
  96. * @param node
  97. * @return
  98. * @throws org.xml.sax.SAXException
  99. */
  100. public void characters( Node node )throws org.xml.sax.SAXException ;
  101. }
  102. /**
  103. */
  104. private boolean DEBUG = false;
  105. /**
  106. */
  107. protected static final String S_NAMESPACE = "http://xml.apache.org/xalan/SQLExtension";
  108. /**
  109. */
  110. protected static final String S_ATTRIB_NOT_SUPPORTED = "Not Supported";
  111. /**
  112. */
  113. protected static final String S_ISTRUE = "true";
  114. /**
  115. */
  116. protected static final String S_ISFALSE = "false";
  117. /**
  118. */
  119. protected static final String S_DOCUMENT = "#root";
  120. /**
  121. */
  122. protected static final String S_TEXT_NODE = "#text";
  123. /**
  124. */
  125. protected static final String S_ELEMENT_NODE = "#element";
  126. /**
  127. */
  128. protected int m_Document_TypeID = 0;
  129. /**
  130. */
  131. protected int m_TextNode_TypeID = 0;
  132. /**
  133. * Store the SQL Data in this growable array
  134. */
  135. protected ObjectArray m_ObjectArray = new ObjectArray();
  136. /**
  137. * For each element node, there can be zero or more attributes. If Attributes
  138. * are assigned, the first attribute for that element will be use here.
  139. * Subsequent elements will use the m_nextsib, m_prevsib array. The sibling
  140. * arrays are not meeant to hold indexes to attribute information but as
  141. * long as there is not direct connection back into the main DTM tree
  142. * we should be OK.
  143. */
  144. protected SuballocatedIntVector m_attribute;
  145. /**
  146. * The Document Index will most likely be 0, but we will reference it
  147. * by variable in case that paradigm falls through.
  148. */
  149. protected int m_DocumentIdx;
  150. /**
  151. * @param mgr
  152. * @param ident
  153. */
  154. public DTMDocument( DTMManager mgr, int ident )
  155. {
  156. super(mgr, null, ident,
  157. null, mgr.getXMLStringFactory(), true);
  158. m_attribute = new SuballocatedIntVector(m_initialblocksize);
  159. }
  160. /**
  161. * A common routine that allocates an Object from the Object Array.
  162. * One of the common bugs in this code was to allocate an Object and
  163. * not incerment m_size, using this method will assure that function.
  164. * @param o
  165. * @return
  166. */
  167. private int allocateNodeObject( Object o )
  168. {
  169. // Need to keep this counter going even if we don't use it.
  170. m_size++;
  171. return m_ObjectArray.append(o);
  172. }
  173. /**
  174. * @param o
  175. * @param level
  176. * @param extendedType
  177. * @param parent
  178. * @param prevsib
  179. * @return
  180. */
  181. protected int addElementWithData( Object o, int level, int extendedType, int parent, int prevsib )
  182. {
  183. int elementIdx = addElement(level,extendedType,parent,prevsib);
  184. int data = allocateNodeObject(o);
  185. m_firstch.setElementAt(data,elementIdx);
  186. m_exptype.setElementAt(m_TextNode_TypeID, data);
  187. // m_level.setElementAt((byte)(level), data);
  188. m_parent.setElementAt(elementIdx, data);
  189. m_prevsib.setElementAt(DTM.NULL, data);
  190. m_nextsib.setElementAt(DTM.NULL, data);
  191. m_attribute.setElementAt(DTM.NULL, data);
  192. m_firstch.setElementAt(DTM.NULL, data);
  193. return elementIdx;
  194. }
  195. /**
  196. * @param level
  197. * @param extendedType
  198. * @param parent
  199. * @param prevsib
  200. * @return
  201. */
  202. protected int addElement( int level, int extendedType, int parent, int prevsib )
  203. {
  204. int node = DTM.NULL;
  205. try
  206. {
  207. // Add the Node and adjust its Extended Type
  208. node = allocateNodeObject(S_ELEMENT_NODE);
  209. m_exptype.setElementAt(extendedType, node);
  210. m_nextsib.setElementAt(DTM.NULL, node);
  211. m_prevsib.setElementAt(prevsib, node);
  212. m_parent.setElementAt(parent, node);
  213. m_firstch.setElementAt(DTM.NULL, node);
  214. // m_level.setElementAt((byte)level, node);
  215. m_attribute.setElementAt(DTM.NULL, node);
  216. if (prevsib != DTM.NULL)
  217. {
  218. // If the previous sibling is already assigned, then we are
  219. // inserting a value into the chain.
  220. if (m_nextsib.elementAt(prevsib) != DTM.NULL)
  221. m_nextsib.setElementAt(m_nextsib.elementAt(prevsib), node);
  222. // Tell the proevious sibling that they have a new bother/sister.
  223. m_nextsib.setElementAt(node, prevsib);
  224. }
  225. // So if we have a valid parent and the new node ended up being first
  226. // in the list, i.e. no prevsib, then set the new node up as the
  227. // first child of the parent. Since we chained the node in the list,
  228. // there should be no reason to worry about the current first child
  229. // of the parent node.
  230. if ((parent != DTM.NULL) && (m_prevsib.elementAt(node) == DTM.NULL))
  231. {
  232. m_firstch.setElementAt(node, parent);
  233. }
  234. }
  235. catch(Exception e)
  236. {
  237. error("Error in addElement: "+e.getMessage());
  238. }
  239. return node;
  240. }
  241. /**
  242. * Link an attribute to a node, if the node already has one or more
  243. * attributes assigned, then just link this one to the attribute list.
  244. * The first attribute is attached to the Parent Node (pnode) through the
  245. * m_attribute array, subsequent attributes are linked through the
  246. * m_prevsib, m_nextsib arrays.
  247. * @param o
  248. * @param extendedType
  249. * @param pnode
  250. * @return
  251. */
  252. protected int addAttributeToNode( Object o, int extendedType, int pnode )
  253. {
  254. int attrib = DTM.NULL;
  255. int prevsib = DTM.NULL;
  256. int lastattrib = DTM.NULL;
  257. int value = DTM.NULL;
  258. try
  259. {
  260. // Add the Node and adjust its Extended Type
  261. attrib = allocateNodeObject(o);
  262. m_attribute.setElementAt(DTM.NULL, attrib);
  263. m_exptype.setElementAt(extendedType, attrib);
  264. // m_level.setElementAt((byte)0, attrib);
  265. // Clear the sibling references
  266. m_nextsib.setElementAt(DTM.NULL, attrib);
  267. m_prevsib.setElementAt(DTM.NULL,attrib);
  268. // Set the parent, although the was we are using attributes
  269. // in the SQL extension this reference will more than likly
  270. // be wrong
  271. m_parent.setElementAt(pnode, attrib);
  272. m_firstch.setElementAt(DTM.NULL, attrib);
  273. if (m_attribute.elementAt(pnode) != DTM.NULL)
  274. {
  275. // OK, we already have an attribute assigned to this
  276. // Node, Insert us into the head of the list.
  277. lastattrib = m_attribute.elementAt(pnode);
  278. m_nextsib.setElementAt(lastattrib, attrib);
  279. m_prevsib.setElementAt(attrib, lastattrib);
  280. }
  281. // Okay set the new attribute up as the first attribute
  282. // for the node.
  283. m_attribute.setElementAt(attrib, pnode);
  284. }
  285. catch(Exception e)
  286. {
  287. error("Error in addAttributeToNode: "+e.getMessage());
  288. }
  289. return attrib;
  290. }
  291. /**
  292. * Allow two nodes to share the same set of attributes. There may be some
  293. * problems because the parent of any attribute will be the original node
  294. * they were assigned to. Need to see how the attribute walker works, then
  295. * we should be able to fake it out.
  296. * @param toNode
  297. * @param fromNode
  298. * @return
  299. */
  300. protected void cloneAttributeFromNode( int toNode, int fromNode )
  301. {
  302. try
  303. {
  304. if (m_attribute.elementAt(toNode) != DTM.NULL)
  305. {
  306. error("Cloneing Attributes, where from Node already had addtibures assigned");
  307. }
  308. m_attribute.setElementAt(m_attribute.elementAt(fromNode), toNode);
  309. }
  310. catch(Exception e)
  311. {
  312. error("Cloning attributes");
  313. }
  314. }
  315. /**
  316. * @param parm1
  317. * @return
  318. */
  319. public int getFirstAttribute( int parm1 )
  320. {
  321. if (DEBUG) System.out.println("getFirstAttribute("+ parm1+")");
  322. int nodeIdx = makeNodeIdentity(parm1);
  323. if (nodeIdx != DTM.NULL)
  324. {
  325. int attribIdx = m_attribute.elementAt(nodeIdx);
  326. return makeNodeHandle(attribIdx);
  327. }
  328. else return DTM.NULL;
  329. }
  330. /**
  331. * @param parm1
  332. * @return
  333. */
  334. public String getNodeValue( int parm1 )
  335. {
  336. if (DEBUG) System.out.println("getNodeValue(" + parm1 + ")");
  337. try
  338. {
  339. Object o = m_ObjectArray.getAt(makeNodeIdentity(parm1));
  340. if (o != null)
  341. {
  342. return o.toString();
  343. }
  344. else
  345. {
  346. return "";
  347. }
  348. }
  349. catch(Exception e)
  350. {
  351. error("Getting String Value");
  352. return null;
  353. }
  354. }
  355. /**
  356. * @param parm1
  357. * @return
  358. */
  359. public XMLString getStringValue( int parm1 )
  360. {
  361. int nodeIdx = makeNodeIdentity(parm1);
  362. if (DEBUG) System.out.println("getStringValue(" + nodeIdx + ")");
  363. try
  364. {
  365. Object o = m_ObjectArray.getAt(nodeIdx);
  366. if (o != null)
  367. {
  368. return m_xstrf.newstr(o.toString());
  369. }
  370. else
  371. {
  372. return m_xstrf.emptystr();
  373. }
  374. }
  375. catch(Exception e)
  376. {
  377. error("Getting String Value");
  378. return null;
  379. }
  380. }
  381. /**
  382. * @param parm1
  383. * @return
  384. */
  385. public int getNextAttribute( int parm1 )
  386. {
  387. int nodeIdx = makeNodeIdentity(parm1);
  388. if (DEBUG) System.out.println("getNextAttribute(" + nodeIdx + ")");
  389. if (nodeIdx != DTM.NULL) return makeNodeHandle(m_nextsib.elementAt(nodeIdx));
  390. else return DTM.NULL;
  391. }
  392. /**
  393. * @return
  394. */
  395. protected int getNumberOfNodes( )
  396. {
  397. if (DEBUG) System.out.println("getNumberOfNodes()");
  398. return m_size;
  399. }
  400. /**
  401. * @return
  402. */
  403. protected boolean nextNode( )
  404. {
  405. if (DEBUG) System.out.println("nextNode()");
  406. return false;
  407. }
  408. /**
  409. * The Expanded Name table holds all of our Node names. The Base class
  410. * will add the common element types, need to call this function from
  411. * the derived class.
  412. * @return
  413. */
  414. protected void createExpandedNameTable( )
  415. {
  416. m_Document_TypeID =
  417. m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_DOCUMENT, DTM.DOCUMENT_NODE);
  418. m_TextNode_TypeID =
  419. m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_TEXT_NODE, DTM.TEXT_NODE);
  420. }
  421. /**
  422. * @return
  423. */
  424. public void dumpDTM( )
  425. {
  426. try
  427. {
  428. // File f = new File("DTMDump"+((Object)this).hashCode()+".txt");
  429. File f = new File("DTMDump.txt");
  430. System.err.println("Dumping... "+f.getAbsolutePath());
  431. PrintStream ps = new PrintStream(new FileOutputStream(f));
  432. while (nextNode()){}
  433. int nRecords = m_size;
  434. ps.println("Total nodes: " + nRecords);
  435. for (int i = 0; i < nRecords; i++)
  436. {
  437. ps.println("=========== " + i + " ===========");
  438. ps.println("NodeName: " + getNodeName(makeNodeHandle(i)));
  439. ps.println("NodeNameX: " + getNodeNameX(makeNodeHandle(i)));
  440. ps.println("LocalName: " + getLocalName(makeNodeHandle(i)));
  441. ps.println("NamespaceURI: " + getNamespaceURI(makeNodeHandle(i)));
  442. ps.println("Prefix: " + getPrefix(makeNodeHandle(i)));
  443. int exTypeID = getExpandedTypeID(makeNodeHandle(i));
  444. ps.println("Expanded Type ID: "
  445. + Integer.toHexString(exTypeID));
  446. int type = getNodeType(makeNodeHandle(i));
  447. String typestring;
  448. switch (type)
  449. {
  450. case DTM.ATTRIBUTE_NODE :
  451. typestring = "ATTRIBUTE_NODE";
  452. break;
  453. case DTM.CDATA_SECTION_NODE :
  454. typestring = "CDATA_SECTION_NODE";
  455. break;
  456. case DTM.COMMENT_NODE :
  457. typestring = "COMMENT_NODE";
  458. break;
  459. case DTM.DOCUMENT_FRAGMENT_NODE :
  460. typestring = "DOCUMENT_FRAGMENT_NODE";
  461. break;
  462. case DTM.DOCUMENT_NODE :
  463. typestring = "DOCUMENT_NODE";
  464. break;
  465. case DTM.DOCUMENT_TYPE_NODE :
  466. typestring = "DOCUMENT_NODE";
  467. break;
  468. case DTM.ELEMENT_NODE :
  469. typestring = "ELEMENT_NODE";
  470. break;
  471. case DTM.ENTITY_NODE :
  472. typestring = "ENTITY_NODE";
  473. break;
  474. case DTM.ENTITY_REFERENCE_NODE :
  475. typestring = "ENTITY_REFERENCE_NODE";
  476. break;
  477. case DTM.NAMESPACE_NODE :
  478. typestring = "NAMESPACE_NODE";
  479. break;
  480. case DTM.NOTATION_NODE :
  481. typestring = "NOTATION_NODE";
  482. break;
  483. case DTM.NULL :
  484. typestring = "NULL";
  485. break;
  486. case DTM.PROCESSING_INSTRUCTION_NODE :
  487. typestring = "PROCESSING_INSTRUCTION_NODE";
  488. break;
  489. case DTM.TEXT_NODE :
  490. typestring = "TEXT_NODE";
  491. break;
  492. default :
  493. typestring = "Unknown!";
  494. break;
  495. }
  496. ps.println("Type: " + typestring);
  497. int firstChild = _firstch(i);
  498. if (DTM.NULL == firstChild)
  499. ps.println("First child: DTM.NULL");
  500. else if (NOTPROCESSED == firstChild)
  501. ps.println("First child: NOTPROCESSED");
  502. else
  503. ps.println("First child: " + firstChild);
  504. int prevSibling = _prevsib(i);
  505. if (DTM.NULL == prevSibling)
  506. ps.println("Prev sibling: DTM.NULL");
  507. else if (NOTPROCESSED == prevSibling)
  508. ps.println("Prev sibling: NOTPROCESSED");
  509. else
  510. ps.println("Prev sibling: " + prevSibling);
  511. int nextSibling = _nextsib(i);
  512. if (DTM.NULL == nextSibling)
  513. ps.println("Next sibling: DTM.NULL");
  514. else if (NOTPROCESSED == nextSibling)
  515. ps.println("Next sibling: NOTPROCESSED");
  516. else
  517. ps.println("Next sibling: " + nextSibling);
  518. int parent = _parent(i);
  519. if (DTM.NULL == parent)
  520. ps.println("Parent: DTM.NULL");
  521. else if (NOTPROCESSED == parent)
  522. ps.println("Parent: NOTPROCESSED");
  523. else
  524. ps.println("Parent: " + parent);
  525. int level = _level(i);
  526. ps.println("Level: " + level);
  527. ps.println("Node Value: " + getNodeValue(i));
  528. ps.println("String Value: " + getStringValue(i));
  529. ps.println("First Attribute Node: " + m_attribute.elementAt(i));
  530. }
  531. }
  532. catch(IOException ioe)
  533. {
  534. ioe.printStackTrace(System.err);
  535. System.exit(-1);
  536. }
  537. }
  538. /**
  539. * Retrieve the text content of a DOM subtree, appending it into a
  540. * user-supplied FastStringBuffer object. Note that attributes are
  541. * not considered part of the content of an element.
  542. * <p>
  543. * There are open questions regarding whitespace stripping.
  544. * Currently we make no special effort in that regard, since the standard
  545. * DOM doesn't yet provide DTD-based information to distinguish
  546. * whitespace-in-element-context from genuine #PCDATA. Note that we
  547. * should probably also consider xml:space if/when we address this.
  548. * DOM Level 3 may solve the problem for us.
  549. * <p>
  550. * %REVIEW% Note that as a DOM-level operation, it can be argued that this
  551. * routine _shouldn't_ perform any processing beyond what the DOM already
  552. * does, and that whitespace stripping and so on belong at the DTM level.
  553. * If you want a stripped DOM view, wrap DTM2DOM around DOM2DTM.
  554. * @param node Node whose subtree is to be walked, gathering the
  555. * contents of all Text or CDATASection nodes.
  556. * @param ch
  557. * @param depth
  558. * @return
  559. * @throws org.xml.sax.SAXException
  560. */
  561. protected static void dispatchNodeData( Node node, ContentHandler ch, int depth )throws org.xml.sax.SAXException
  562. {
  563. switch (node.getNodeType())
  564. {
  565. case Node.DOCUMENT_FRAGMENT_NODE :
  566. case Node.DOCUMENT_NODE :
  567. case Node.ELEMENT_NODE :
  568. {
  569. for (Node child = node.getFirstChild(); null != child;
  570. child = child.getNextSibling())
  571. {
  572. dispatchNodeData(child, ch, depth+1);
  573. }
  574. }
  575. break;
  576. case Node.PROCESSING_INSTRUCTION_NODE : // %REVIEW%
  577. case Node.COMMENT_NODE :
  578. if(0 != depth)
  579. break;
  580. // NOTE: Because this operation works in the DOM space, it does _not_ attempt
  581. // to perform Text Coalition. That should only be done in DTM space.
  582. case Node.TEXT_NODE :
  583. case Node.CDATA_SECTION_NODE :
  584. case Node.ATTRIBUTE_NODE :
  585. String str = node.getNodeValue();
  586. if(ch instanceof CharacterNodeHandler)
  587. {
  588. ((CharacterNodeHandler)ch).characters(node);
  589. }
  590. else
  591. {
  592. ch.characters(str.toCharArray(), 0, str.length());
  593. }
  594. break;
  595. // /* case Node.PROCESSING_INSTRUCTION_NODE :
  596. // // warning(XPATHErrorResources.WG_PARSING_AND_PREPARING);
  597. // break; */
  598. default :
  599. // ignore
  600. break;
  601. }
  602. }
  603. /*********************************************************************/
  604. /*********************************************************************/
  605. /******************* End of Functions we Wrote ***********************/
  606. /*********************************************************************/
  607. /*********************************************************************/
  608. /**
  609. * For the moment all the run time properties are ignored by this
  610. * class.
  611. * @param property a <code>String</code> value
  612. * @param value an <code>Object</code> value
  613. * @return
  614. */
  615. public void setProperty( String property, Object value )
  616. {
  617. }
  618. /**
  619. * No source information is available for DOM2DTM, so return
  620. * <code>null</code> here.
  621. * @param node an <code>int</code> value
  622. * @return null
  623. */
  624. public SourceLocator getSourceLocatorFor( int node )
  625. {
  626. return null;
  627. }
  628. /**
  629. * @param parm1
  630. * @return
  631. */
  632. protected int getNextNodeIdentity( int parm1 )
  633. {
  634. if (DEBUG) System.out.println("getNextNodeIdenty(" + parm1 + ")");
  635. return DTM.NULL;
  636. }
  637. /**
  638. * @param parm1
  639. * @param parm2
  640. * @param parm3
  641. * @return
  642. */
  643. public int getAttributeNode( int parm1, String parm2, String parm3 )
  644. {
  645. if (DEBUG)
  646. {
  647. System.out.println(
  648. "getAttributeNode(" +
  649. parm1 + "," +
  650. parm2 + "," +
  651. parm3 + ")");
  652. }
  653. return DTM.NULL;
  654. }
  655. /**
  656. * @param parm1
  657. * @return
  658. */
  659. public String getLocalName( int parm1 )
  660. {
  661. // int exID = this.getExpandedTypeID( makeNodeIdentity(parm1) );
  662. int exID = getExpandedTypeID(parm1);
  663. if (DEBUG)
  664. {
  665. DEBUG = false;
  666. System.out.print("getLocalName(" + parm1 + ") -> ");
  667. System.out.println("..." + getLocalNameFromExpandedNameID(exID) );
  668. DEBUG = true;
  669. }
  670. return getLocalNameFromExpandedNameID(exID);
  671. }
  672. /**
  673. * @param parm1
  674. * @return
  675. */
  676. public String getNodeName( int parm1 )
  677. {
  678. // int exID = getExpandedTypeID( makeNodeIdentity(parm1) );
  679. int exID = getExpandedTypeID( parm1 );
  680. if (DEBUG)
  681. {
  682. DEBUG = false;
  683. System.out.print("getLocalName(" + parm1 + ") -> ");
  684. System.out.println("..." + getLocalNameFromExpandedNameID(exID) );
  685. DEBUG = true;
  686. }
  687. return getLocalNameFromExpandedNameID(exID);
  688. }
  689. /**
  690. * @param parm1
  691. * @return
  692. */
  693. public boolean isAttributeSpecified( int parm1 )
  694. {
  695. if (DEBUG) System.out.println("isAttributeSpecified(" + parm1 + ")");
  696. return false;
  697. }
  698. /**
  699. * @param parm1
  700. * @return
  701. */
  702. public String getUnparsedEntityURI( String parm1 )
  703. {
  704. if (DEBUG) System.out.println("getUnparsedEntityURI(" + parm1 + ")");
  705. return "";
  706. }
  707. /**
  708. * @return
  709. */
  710. public DTDHandler getDTDHandler( )
  711. {
  712. if (DEBUG) System.out.println("getDTDHandler()");
  713. return null;
  714. }
  715. /**
  716. * @param parm1
  717. * @return
  718. */
  719. public String getPrefix( int parm1 )
  720. {
  721. if (DEBUG) System.out.println("getPrefix(" + parm1 + ")");
  722. return "";
  723. }
  724. /**
  725. * @return
  726. */
  727. public EntityResolver getEntityResolver( )
  728. {
  729. if (DEBUG) System.out.println("getEntityResolver()");
  730. return null;
  731. }
  732. /**
  733. * @return
  734. */
  735. public String getDocumentTypeDeclarationPublicIdentifier( )
  736. {
  737. if (DEBUG) System.out.println("get_DTD_PubId()");
  738. return "";
  739. }
  740. /**
  741. * @return
  742. */
  743. public LexicalHandler getLexicalHandler( )
  744. {
  745. if (DEBUG) System.out.println("getLexicalHandler()");
  746. return null;
  747. }
  748. /**
  749. * @return
  750. */
  751. public boolean needsTwoThreads( )
  752. {
  753. if (DEBUG) System.out.println("needsTwoThreads()");
  754. return false;
  755. }
  756. /**
  757. * @return
  758. */
  759. public ContentHandler getContentHandler( )
  760. {
  761. if (DEBUG) System.out.println("getContentHandler()");
  762. return null;
  763. }
  764. /**
  765. * @param parm1
  766. * @param parm2
  767. * @return
  768. * @throws org.xml.sax.SAXException
  769. * @return
  770. * @throws org.xml.sax.SAXException
  771. */
  772. public void dispatchToEvents( int parm1, ContentHandler parm2 )throws org.xml.sax.SAXException
  773. {
  774. if (DEBUG)
  775. {
  776. System.out.println(
  777. "dispathcToEvents(" +
  778. parm1 + "," +
  779. parm2 + ")");
  780. }
  781. return;
  782. }
  783. /**
  784. * @param parm1
  785. * @return
  786. */
  787. public String getNamespaceURI( int parm1 )
  788. {
  789. if (DEBUG) System.out.println("getNamespaceURI(" +parm1+")");
  790. return "";
  791. }
  792. /**
  793. * @param nodeHandle
  794. * @param ch
  795. * @param normalize
  796. * @return
  797. * @throws org.xml.sax.SAXException
  798. * @return
  799. * @throws org.xml.sax.SAXException
  800. */
  801. public void dispatchCharactersEvents( int nodeHandle, ContentHandler ch, boolean normalize )throws org.xml.sax.SAXException
  802. {
  803. if (DEBUG)
  804. {
  805. System.out.println("dispatchCharacterEvents(" +
  806. nodeHandle + "," +
  807. ch + "," +
  808. normalize + ")");
  809. }
  810. if(normalize)
  811. {
  812. XMLString str = getStringValue(nodeHandle);
  813. str = str.fixWhiteSpace(true, true, false);
  814. str.dispatchCharactersEvents(ch);
  815. }
  816. else
  817. {
  818. int type = getNodeType(nodeHandle);
  819. Node node = getNode(nodeHandle);
  820. dispatchNodeData(node, ch, 0);
  821. }
  822. }
  823. /**
  824. * Event overriding for Debug
  825. * @return
  826. */
  827. public boolean supportsPreStripping( )
  828. {
  829. if (DEBUG) System.out.println("supportsPreStripping()");
  830. return super.supportsPreStripping();
  831. }
  832. /**
  833. * @param parm1
  834. * @return
  835. */
  836. protected int _exptype( int parm1 )
  837. {
  838. if (DEBUG) System.out.println("_exptype(" + parm1 + ")");
  839. return super._exptype( parm1);
  840. }
  841. /**
  842. * @param parm1
  843. * @return
  844. */
  845. protected SuballocatedIntVector findNamespaceContext( int parm1 )
  846. {
  847. if (DEBUG) System.out.println("SuballocatedIntVector(" + parm1 + ")");
  848. return super.findNamespaceContext( parm1);
  849. }
  850. /**
  851. * @param parm1
  852. * @return
  853. */
  854. protected int _prevsib( int parm1 )
  855. {
  856. if (DEBUG) System.out.println("_prevsib(" + parm1+ ")");
  857. return super._prevsib( parm1);
  858. }
  859. /**
  860. * @param parm1
  861. * @return
  862. */
  863. protected short _type( int parm1 )
  864. {
  865. if (DEBUG) System.out.println("_type(" + parm1 + ")");
  866. return super._type( parm1);
  867. }
  868. /**
  869. * @param parm1
  870. * @return
  871. */
  872. public Node getNode( int parm1 )
  873. {
  874. if (DEBUG) System.out.println("getNode(" + parm1 + ")");
  875. return super.getNode( parm1);
  876. }
  877. /**
  878. * @param parm1
  879. * @return
  880. */
  881. public int getPreviousSibling( int parm1 )
  882. {
  883. if (DEBUG) System.out.println("getPrevSib(" + parm1 + ")");
  884. return super.getPreviousSibling( parm1);
  885. }
  886. /**
  887. * @param parm1
  888. * @return
  889. */
  890. public String getDocumentStandalone( int parm1 )
  891. {
  892. if (DEBUG) System.out.println("getDOcStandAlone(" + parm1 + ")");
  893. return super.getDocumentStandalone( parm1);
  894. }
  895. /**
  896. * @param parm1
  897. * @return
  898. */
  899. public String getNodeNameX( int parm1 )
  900. {
  901. if (DEBUG) System.out.println("getNodeNameX(" + parm1 + ")");
  902. //return super.getNodeNameX( parm1);
  903. return getNodeName(parm1);
  904. }
  905. /**
  906. * @param parm1
  907. * @param parm2
  908. * @return
  909. */
  910. public void setFeature( String parm1, boolean parm2 )
  911. {
  912. if (DEBUG)
  913. {
  914. System.out.println(
  915. "setFeature(" +
  916. parm1 + "," +
  917. parm2 + ")");
  918. }
  919. super.setFeature( parm1, parm2);
  920. }
  921. /**
  922. * @param parm1
  923. * @return
  924. */
  925. protected int _parent( int parm1 )
  926. {
  927. if (DEBUG) System.out.println("_parent(" + parm1 + ")");
  928. return super._parent( parm1);
  929. }
  930. /**
  931. * @param parm1
  932. * @param parm2
  933. * @return
  934. */
  935. protected void indexNode( int parm1, int parm2 )
  936. {
  937. if (DEBUG) System.out.println("indexNode("+parm1+","+parm2+")");
  938. super.indexNode( parm1, parm2);
  939. }
  940. /**
  941. * @return
  942. */
  943. protected boolean getShouldStripWhitespace( )
  944. {
  945. if (DEBUG) System.out.println("getShouldStripWS()");
  946. return super.getShouldStripWhitespace();
  947. }
  948. /**
  949. * @return
  950. */
  951. protected void popShouldStripWhitespace( )
  952. {
  953. if (DEBUG) System.out.println("popShouldStripWS()");
  954. super.popShouldStripWhitespace();
  955. }
  956. /**
  957. * @param parm1
  958. * @param parm2
  959. * @return
  960. */
  961. public boolean isNodeAfter( int parm1, int parm2 )
  962. {
  963. if (DEBUG) System.out.println("isNodeAfter(" + parm1 + "," + parm2 + ")");
  964. return super.isNodeAfter( parm1, parm2);
  965. }
  966. /**
  967. * @param parm1
  968. * @return
  969. */
  970. public int getNamespaceType( int parm1 )
  971. {
  972. if (DEBUG) System.out.println("getNamespaceType(" + parm1 + ")");
  973. return super.getNamespaceType( parm1);
  974. }
  975. /**
  976. * @param parm1
  977. * @return
  978. */
  979. protected int _level( int parm1 )
  980. {
  981. if (DEBUG) System.out.println("_level(" + parm1 + ")");
  982. return super._level( parm1);
  983. }
  984. /**
  985. * @param parm1
  986. * @return
  987. */
  988. protected void pushShouldStripWhitespace( boolean parm1 )
  989. {
  990. if (DEBUG) System.out.println("push_ShouldStripWS(" + parm1 + ")");
  991. super.pushShouldStripWhitespace( parm1);
  992. }
  993. /**
  994. * @param parm1
  995. * @return
  996. */
  997. public String getDocumentVersion( int parm1 )
  998. {
  999. if (DEBUG) System.out.println("getDocVer("+parm1+")");
  1000. return super.getDocumentVersion( parm1);
  1001. }
  1002. /**
  1003. * @param parm1
  1004. * @param parm2
  1005. * @return
  1006. */
  1007. public boolean isSupported( String parm1, String parm2 )
  1008. {
  1009. if (DEBUG) System.out.println("isSupported("+parm1+","+parm2+")");
  1010. return super.isSupported( parm1, parm2);
  1011. }
  1012. /**
  1013. * @param parm1
  1014. * @return
  1015. */
  1016. protected void setShouldStripWhitespace( boolean parm1 )
  1017. {
  1018. if (DEBUG) System.out.println("set_ShouldStripWS("+parm1+")");
  1019. super.setShouldStripWhitespace( parm1);
  1020. }
  1021. /**
  1022. * @param parm1
  1023. * @param parm2
  1024. * @return
  1025. */
  1026. protected void ensureSizeOfIndex( int parm1, int parm2 )
  1027. {
  1028. if (DEBUG) System.out.println("ensureSizeOfIndex("+parm1+","+parm2+")");
  1029. super.ensureSizeOfIndex( parm1, parm2);
  1030. }
  1031. /**
  1032. * @param parm1
  1033. * @return
  1034. */
  1035. protected void ensureSize( int parm1 )
  1036. {
  1037. if (DEBUG) System.out.println("ensureSize("+parm1+")");
  1038. // IntVectors in DTMDefaultBase are now self-sizing, and ensureSize()
  1039. // is being dropped.
  1040. //super.ensureSize( parm1);
  1041. }
  1042. /**
  1043. * @param parm1
  1044. * @return
  1045. */
  1046. public String getDocumentEncoding( int parm1 )
  1047. {
  1048. if (DEBUG) System.out.println("getDocumentEncoding("+parm1+")");
  1049. return super.getDocumentEncoding( parm1);
  1050. }
  1051. /**
  1052. * @param parm1
  1053. * @param parm2
  1054. * @param parm3
  1055. * @return
  1056. */
  1057. public void appendChild( int parm1, boolean parm2, boolean parm3 )
  1058. {
  1059. if (DEBUG)
  1060. {
  1061. System.out.println(
  1062. "appendChild(" +
  1063. parm1 + "," +
  1064. parm2 + "," +
  1065. parm3 + ")");
  1066. }
  1067. super.appendChild( parm1, parm2, parm3);
  1068. }
  1069. /**
  1070. * @param parm1
  1071. * @return
  1072. */
  1073. public short getLevel( int parm1 )
  1074. {
  1075. if (DEBUG) System.out.println("getLevel("+parm1+")");
  1076. return super.getLevel( parm1);
  1077. }
  1078. /**
  1079. * @return
  1080. */
  1081. public String getDocumentBaseURI( )
  1082. {
  1083. if (DEBUG) System.out.println("getDocBaseURI()");
  1084. return super.getDocumentBaseURI();
  1085. }
  1086. /**
  1087. * @param parm1
  1088. * @param parm2
  1089. * @param parm3
  1090. * @return
  1091. */
  1092. public int getNextNamespaceNode( int parm1, int parm2, boolean parm3 )
  1093. {
  1094. if (DEBUG)
  1095. {
  1096. System.out.println(
  1097. "getNextNamesapceNode(" +
  1098. parm1 + "," +
  1099. parm2 + "," +
  1100. parm3 + ")");
  1101. }
  1102. return super.getNextNamespaceNode( parm1, parm2, parm3);
  1103. }
  1104. /**
  1105. * @param parm1
  1106. * @return
  1107. */
  1108. public void appendTextChild( String parm1 )
  1109. {
  1110. if (DEBUG) System.out.println("appendTextChild(" + parm1 + ")");
  1111. super.appendTextChild( parm1);
  1112. }
  1113. /**
  1114. * @param parm1
  1115. * @param parm2
  1116. * @param parm3
  1117. * @param parm4
  1118. * @return
  1119. */
  1120. protected int findGTE( int[] parm1, int parm2, int parm3, int parm4 )
  1121. {
  1122. if (DEBUG)
  1123. {
  1124. System.out.println(
  1125. "findGTE("+
  1126. parm1 + "," +
  1127. parm2 + "," +
  1128. parm3 + ")");
  1129. }
  1130. return super.findGTE( parm1, parm2, parm3, parm4);
  1131. }
  1132. /**
  1133. * @param parm1
  1134. * @param parm2
  1135. * @return
  1136. */
  1137. public int getFirstNamespaceNode( int parm1, boolean parm2 )
  1138. {
  1139. if (DEBUG) System.out.println("getFirstNamespaceNode()");
  1140. return super.getFirstNamespaceNode( parm1, parm2);
  1141. }
  1142. /**
  1143. * @param parm1
  1144. * @return
  1145. */
  1146. public int getStringValueChunkCount( int parm1 )
  1147. {
  1148. if (DEBUG) System.out.println("getStringChunkCount(" + parm1 + ")");
  1149. return super.getStringValueChunkCount( parm1);
  1150. }
  1151. /**
  1152. * @param parm1
  1153. * @return
  1154. */
  1155. public int getLastChild( int parm1 )
  1156. {
  1157. if (DEBUG) System.out.println("getLastChild(" + parm1 + ")");
  1158. return super.getLastChild( parm1);
  1159. }
  1160. /**
  1161. * @param parm1
  1162. * @return
  1163. */
  1164. public boolean hasChildNodes( int parm1 )
  1165. {
  1166. if (DEBUG) System.out.println("hasChildNodes(" + parm1 + ")");
  1167. return super.hasChildNodes( parm1);
  1168. }
  1169. /**
  1170. * @param parm1
  1171. * @return
  1172. */
  1173. public short getNodeType( int parm1 )
  1174. {
  1175. if (DEBUG)
  1176. {
  1177. DEBUG=false;
  1178. System.out.print("getNodeType(" + parm1 + ") ");
  1179. int exID = getExpandedTypeID(parm1);
  1180. String name = getLocalNameFromExpandedNameID(exID);
  1181. System.out.println(
  1182. ".. Node name [" + name + "]" +
  1183. "[" + getNodeType( parm1) + "]");
  1184. DEBUG=true;
  1185. }
  1186. return super.getNodeType( parm1);
  1187. }
  1188. /**
  1189. * @param parm1
  1190. * @return
  1191. */
  1192. public boolean isCharacterElementContentWhitespace( int parm1 )
  1193. {
  1194. if (DEBUG) System.out.println("isCharacterElementContentWhitespace(" + parm1 +")");
  1195. return super.isCharacterElementContentWhitespace( parm1);
  1196. }
  1197. /**
  1198. * @param parm1
  1199. * @return
  1200. */
  1201. public int getFirstChild( int parm1 )
  1202. {
  1203. if (DEBUG) System.out.println("getFirstChild(" + parm1 + ")");
  1204. return super.getFirstChild( parm1);
  1205. }
  1206. /**
  1207. * @param parm1
  1208. * @return
  1209. */
  1210. public String getDocumentSystemIdentifier( int parm1 )
  1211. {
  1212. if (DEBUG) System.out.println("getDocSysID(" + parm1 + ")");
  1213. return super.getDocumentSystemIdentifier( parm1);
  1214. }
  1215. /**
  1216. * @param parm1
  1217. * @param parm2
  1218. * @return
  1219. */
  1220. protected void declareNamespaceInContext( int parm1, int parm2 )
  1221. {
  1222. if (DEBUG) System.out.println("declareNamespaceContext("+parm1+","+parm2+")");
  1223. super.declareNamespaceInContext( parm1, parm2);
  1224. }
  1225. /**
  1226. * @param parm1
  1227. * @return
  1228. */
  1229. public String getNamespaceFromExpandedNameID( int parm1 )
  1230. {
  1231. if (DEBUG)
  1232. {
  1233. DEBUG = false;
  1234. System.out.print("getNamespaceFromExpandedNameID("+parm1+")");
  1235. System.out.println("..." + super.getNamespaceFromExpandedNameID( parm1) );
  1236. DEBUG = true;
  1237. }
  1238. return super.getNamespaceFromExpandedNameID( parm1);
  1239. }
  1240. /**
  1241. * @param parm1
  1242. * @return
  1243. */
  1244. public String getLocalNameFromExpandedNameID( int parm1 )
  1245. {
  1246. if (DEBUG)
  1247. {
  1248. DEBUG = false;
  1249. System.out.print("getLocalNameFromExpandedNameID("+parm1+")");
  1250. System.out.println("..." + super.getLocalNameFromExpandedNameID( parm1));
  1251. DEBUG = true;
  1252. }
  1253. return super.getLocalNameFromExpandedNameID( parm1);
  1254. }
  1255. /**
  1256. * @param parm1
  1257. * @return
  1258. */
  1259. public int getExpandedTypeID( int parm1 )
  1260. {
  1261. if (DEBUG) System.out.println("getExpandedTypeID("+parm1+")");
  1262. return super.getExpandedTypeID( parm1);
  1263. }
  1264. /**
  1265. * @return
  1266. */
  1267. public int getDocument( )
  1268. {
  1269. if (DEBUG) System.out.println("getDocument()");
  1270. return super.getDocument();
  1271. }
  1272. /**
  1273. * @param parm1
  1274. * @param parm2
  1275. * @return
  1276. */
  1277. protected int findInSortedSuballocatedIntVector( SuballocatedIntVector parm1, int parm2 )
  1278. {
  1279. if (DEBUG)
  1280. {
  1281. System.out.println(
  1282. "findInSortedSubAlloctedVector(" +
  1283. parm1 + "," +
  1284. parm2 + ")");
  1285. }
  1286. return super.findInSortedSuballocatedIntVector( parm1, parm2);
  1287. }
  1288. /**
  1289. * @param parm1
  1290. * @return
  1291. */
  1292. public boolean isDocumentAllDeclarationsProcessed( int parm1 )
  1293. {
  1294. if (DEBUG) System.out.println("isDocumentAllDeclProc("+parm1+")");
  1295. return super.isDocumentAllDeclarationsProcessed( parm1);
  1296. }
  1297. /**
  1298. * @param parm1
  1299. * @return
  1300. */
  1301. protected void error( String parm1 )
  1302. {
  1303. if (DEBUG) System.out.println("error("+parm1+")");
  1304. super.error( parm1);
  1305. }
  1306. /**
  1307. * @param parm1
  1308. * @return
  1309. */
  1310. protected int _firstch( int parm1 )
  1311. {
  1312. if (DEBUG) System.out.println("_firstch("+parm1+")");
  1313. return super._firstch( parm1);
  1314. }
  1315. /**
  1316. * @param parm1
  1317. * @return
  1318. */
  1319. public int getOwnerDocument( int parm1 )
  1320. {
  1321. if (DEBUG) System.out.println("getOwnerDoc("+parm1+")");
  1322. return super.getOwnerDocument( parm1);
  1323. }
  1324. /**
  1325. * @param parm1
  1326. * @return
  1327. */
  1328. protected int _nextsib( int parm1 )
  1329. {
  1330. if (DEBUG) System.out.println("_nextSib("+parm1+")");
  1331. return super._nextsib( parm1);
  1332. }
  1333. /**
  1334. * @param parm1
  1335. * @return
  1336. */
  1337. public int getNextSibling( int parm1 )
  1338. {
  1339. if (DEBUG) System.out.println("getNextSibling("+parm1+")");
  1340. return super.getNextSibling( parm1);
  1341. }
  1342. /**
  1343. * @return
  1344. */
  1345. public boolean getDocumentAllDeclarationsProcessed( )
  1346. {
  1347. if (DEBUG) System.out.println("getDocAllDeclProc()");
  1348. return super.getDocumentAllDeclarationsProcessed();
  1349. }
  1350. /**
  1351. * @param parm1
  1352. * @return
  1353. */
  1354. public int getParent( int parm1 )
  1355. {
  1356. if (DEBUG) System.out.println("getParent("+parm1+")");
  1357. return super.getParent( parm1);
  1358. }
  1359. /**
  1360. * @param parm1
  1361. * @param parm2
  1362. * @param parm3
  1363. * @return
  1364. */
  1365. public int getExpandedTypeID( String parm1, String parm2, int parm3 )
  1366. {
  1367. if (DEBUG) System.out.println("getExpandedTypeID()");
  1368. return super.getExpandedTypeID( parm1, parm2, parm3);
  1369. }
  1370. /**
  1371. * @param parm1
  1372. * @return
  1373. */
  1374. public void setDocumentBaseURI( String parm1 )
  1375. {
  1376. if (DEBUG) System.out.println("setDocBaseURI()");
  1377. super.setDocumentBaseURI( parm1);
  1378. }
  1379. /**
  1380. * @param parm1
  1381. * @param parm2
  1382. * @param parm3
  1383. * @return
  1384. */
  1385. public char[] getStringValueChunk( int parm1, int parm2, int[] parm3 )
  1386. {
  1387. if (DEBUG)
  1388. {
  1389. System.out.println("getStringChunkValue(" +
  1390. parm1 + "," +
  1391. parm2 + ")");
  1392. }
  1393. return super.getStringValueChunk( parm1, parm2, parm3);
  1394. }
  1395. /**
  1396. * @param parm1
  1397. * @return
  1398. */
  1399. public DTMAxisTraverser getAxisTraverser( int parm1 )
  1400. {
  1401. if (DEBUG) System.out.println("getAxixTraverser("+parm1+")");
  1402. return super.getAxisTraverser( parm1);
  1403. }
  1404. /**
  1405. * @param parm1
  1406. * @param parm2
  1407. * @return
  1408. */
  1409. public DTMAxisIterator getTypedAxisIterator( int parm1, int parm2 )
  1410. {
  1411. if (DEBUG) System.out.println("getTypedAxisIterator("+parm1+","+parm2+")");
  1412. return super.getTypedAxisIterator( parm1, parm2);
  1413. }
  1414. /**
  1415. * @param parm1
  1416. * @return
  1417. */
  1418. public DTMAxisIterator getAxisIterator( int parm1 )
  1419. {
  1420. if (DEBUG) System.out.println("getAxisIterator("+parm1+")");
  1421. return super.getAxisIterator( parm1);
  1422. }
  1423. /**
  1424. * @param parm1
  1425. * @return
  1426. */
  1427. public int getElementById( String parm1 )
  1428. {
  1429. if (DEBUG) System.out.println("getElementByID("+parm1+")");
  1430. return DTM.NULL;
  1431. }
  1432. /**
  1433. * @return
  1434. */
  1435. public DeclHandler getDeclHandler( )
  1436. {
  1437. if (DEBUG) System.out.println("getDeclHandler()");
  1438. return null;
  1439. }
  1440. /**
  1441. * @return
  1442. */
  1443. public ErrorHandler getErrorHandler( )
  1444. {
  1445. if (DEBUG) System.out.println("getErrorHandler()");
  1446. return null;
  1447. }
  1448. /**
  1449. * @return
  1450. */
  1451. public String getDocumentTypeDeclarationSystemIdentifier( )
  1452. {
  1453. if (DEBUG) System.out.println("get_DTD-SID()");
  1454. return null;
  1455. }
  1456. }