johng 01/07/15 12:30:58 Modified: java/src/org/apache/xalan/lib/sql SQLDocument.java Log: Project Update Submitted by: John gentilin mailto://[EMAIL PROTECTED] Revision Changes Path 1.3 +575 -244 xml-xalan/java/src/org/apache/xalan/lib/sql/SQLDocument.java Index: SQLDocument.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/lib/sql/SQLDocument.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SQLDocument.java 2001/07/12 20:02:44 1.2 +++ SQLDocument.java 2001/07/15 19:30:57 1.3 @@ -89,18 +89,17 @@ import java.sql.SQLException; import org.w3c.dom.Node; +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 SQLDocument extends DTMDefaultBaseIterators { - private boolean DEBUG = true; - /** - * - */ - private Connection m_Connection = null; - private Statement m_Statement = null; - private ResultSet m_ResultSet = null; + private boolean DEBUG = false; private static final String S_NAMESPACE = null; @@ -108,6 +107,10 @@ private static final String S_ISTRUE="true"; private static final String S_ISFALSE="false"; + private static final String S_DOCUMENT = "#root"; + private static final String S_TEXT_NODE = "#text"; + private static final String S_ELEMENT_NODE = "#element"; + private static final String S_COLUMN_HEADER = "column-header"; private static final String S_ROW_SET = "row-set"; private static final String S_ROW = "row"; @@ -130,6 +133,9 @@ private static final String S_ISWRITEABLE = "writable"; private static final String S_ISSEARCHABLE = "searchable"; + private int m_Document_TypeID = 0; + private int m_TextNode_TypeID = 0; + private int m_ColumnHeader_TypeID = 0; private int m_RowSet_TypeID = 0; private int m_Row_TypeID = 0; @@ -153,11 +159,48 @@ private int m_ColAttrib_ISSEARCHABLE_TypeID = 0; /** + * The DBMS Connection used to produce this SQL Document. + * Will be used to clear free up the database resources on + * close. + */ + private Connection m_Connection = null; + + /** + * The Statement used to extract the data from the Database connection. + * We really don't need the connection, but it is NOT defined from + * JDBC Driver to driver what happens to the ResultSet if the statment + * is closed prior to reading all the data needed. So as long as we are + * using the ResultSet, we will track the Statement used to produce it. + */ + private Statement m_Statement = null; + + /** + * The conduit to our data that will be used to fill the document. + */ + private ResultSet m_ResultSet = null; + + /** * Store the SQL Data in this growable array */ private 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. + */ + private int m_DocumentIdx; + + /** * As the column header array is built, keep the node index * for each Column. * @@ -167,6 +210,10 @@ private int[] m_ColHeadersIdx; /** + * An indicator on how many columns are in this query + */ + private int m_ColCount; + /** * The index of the Row Set node. This is the sibling directly after * the last Column Header. */ @@ -185,21 +232,25 @@ */ private int m_LastRowIdx = DTM.NULL; - public SQLDocument(DTMManager mgr, int ident, Connection con, Statement stmt, ResultSet data) + public SQLDocument( + DTMManager mgr, int ident, + Connection con, Statement stmt, ResultSet data) throws SQLException { super(mgr, null, ident, null, mgr.getXMLStringFactory(), true); - // DTMManager mgr, Source source, int dtmIdentity, - // DTMWSFilter whiteSpaceFilter, XMLStringFactory xstringfactory, - // boolean doIndexing m_Connection = con; m_Statement = stmt; m_ResultSet = data; + m_attribute = new SuballocatedIntVector(m_initialblocksize); + createExpandedNameTable(); extractSQLMetaData(m_ResultSet.getMetaData()); + + // Let's see what we have + dumpDTM(); } @@ -209,17 +260,18 @@ */ private void extractSQLMetaData(ResultSetMetaData meta) { - int colCount = 0; // Build the Node Tree, just add the Column Header // branch now, the Row & col elements will be added // on request. + // Start the document here + m_DocumentIdx = addElement(0, m_Document_TypeID, DTM.NULL, DTM.NULL); // Add in the row-set Element - m_RowSetIdx = addNode(null, 0, m_RowSet_TypeID, DTM.NULL, DTM.NULL); + m_RowSetIdx = addElement(1, m_RowSet_TypeID, m_DocumentIdx, DTM.NULL); try { - colCount = meta.getColumnCount(); - m_ColHeadersIdx = new int[colCount]; + m_ColCount = meta.getColumnCount(); + m_ColHeadersIdx = new int[m_ColCount]; } catch(Exception e) { @@ -235,222 +287,223 @@ int lastColHeaderIdx = DTM.NULL; // JDBC Columms Start at 1 - for (int i=1; i<= colCount; i++) + int i = 1; + for (i=1; i<= m_ColCount; i++) { - idx = DTM.NULL; - m_ColHeadersIdx[i-1] = - addNode( - null, 1, - m_ColumnHeader_TypeID, m_RowSetIdx, lastColHeaderIdx); + addElement(2,m_ColumnHeader_TypeID, m_RowSetIdx, lastColHeaderIdx); lastColHeaderIdx = m_ColHeadersIdx[i-1]; // A bit brute force, but not sure how to clean it up - +/* try { - idx = addNode( - new Integer(meta.getColumnDisplaySize(i)), 1, - m_ColAttrib_CATALOGUE_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getCatalogName(i), + m_ColAttrib_CATALOGUE_NAME_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_CATALOGUE_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_CATALOGUE_NAME_TypeID, lastColHeaderIdx); } try { - idx = addNode( - new Integer(meta.getColumnDisplaySize(i)), 1, - m_ColAttrib_DISPLAY_SIZE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + new Integer(meta.getColumnDisplaySize(i)), + m_ColAttrib_DISPLAY_SIZE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_DISPLAY_SIZE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_DISPLAY_SIZE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.getColumnLabel(i), 1, - m_ColAttrib_COLUMN_LABEL_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getColumnLabel(i), + m_ColAttrib_COLUMN_LABEL_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_COLUMN_LABEL_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_COLUMN_LABEL_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.getColumnName(i), 1, - m_ColAttrib_COLUMN_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getColumnName(i), + m_ColAttrib_COLUMN_NAME_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_COLUMN_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_COLUMN_NAME_TypeID, lastColHeaderIdx); } try { - idx = addNode( - new Integer(meta.getColumnType(i)), 1, - m_ColAttrib_COLUMN_TYPE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + new Integer(meta.getColumnType(i)), + m_ColAttrib_COLUMN_TYPE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_COLUMN_TYPE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_COLUMN_TYPE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.getColumnTypeName(i), 1, - m_ColAttrib_COLUMN_TYPENAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getColumnTypeName(i), + m_ColAttrib_COLUMN_TYPENAME_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_COLUMN_TYPENAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_COLUMN_TYPENAME_TypeID, lastColHeaderIdx); } try { - idx = addNode( - new Integer(meta.getPrecision(i)), 1, - m_ColAttrib_PRECISION_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + new Integer(meta.getPrecision(i)), + m_ColAttrib_PRECISION_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_PRECISION_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_PRECISION_TypeID, lastColHeaderIdx); } try { - idx = addNode( - new Integer(meta.getScale(i)), 1, - m_ColAttrib_SCALE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + new Integer(meta.getScale(i)), + m_ColAttrib_SCALE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_SCALE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_SCALE_TypeID, lastColHeaderIdx); } + try { - idx = addNode( - meta.getSchemaName(i), 1, - m_ColAttrib_SCHEMA_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getSchemaName(i), + m_ColAttrib_SCHEMA_NAME_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_SCHEMA_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_SCHEMA_NAME_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.getTableName(i), 1, - m_ColAttrib_TABLE_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.getTableName(i), + m_ColAttrib_TABLE_NAME_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_TABLE_NAME_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_TABLE_NAME_TypeID, lastColHeaderIdx); } + try { - idx = addNode( - meta.isCaseSensitive(i) ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_CASESENSITIVE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isCaseSensitive(i) ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_CASESENSITIVE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_CASESENSITIVE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_CASESENSITIVE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.isDefinitelyWritable(i) ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_DEFINITLEYWRITEABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isDefinitelyWritable(i) ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_DEFINITLEYWRITEABLE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_DEFINITLEYWRITEABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_DEFINITLEYWRITEABLE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.isNullable(i) != 0 ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_ISNULLABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isNullable(i) != 0 ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_ISNULLABLE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_ISNULLABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_ISNULLABLE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.isSigned(i) ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_ISSIGNED_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isSigned(i) ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_ISSIGNED_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_ISSIGNED_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_ISSIGNED_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.isWritable(i) == true ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_ISWRITEABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isWritable(i) == true ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_ISWRITEABLE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_ISWRITEABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_ISWRITEABLE_TypeID, lastColHeaderIdx); } try { - idx = addNode( - meta.isSearchable(i) == true ? S_ISTRUE : S_ISFALSE, 1, - m_ColAttrib_ISSEARCHABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + meta.isSearchable(i) == true ? S_ISTRUE : S_ISFALSE, + m_ColAttrib_ISSEARCHABLE_TypeID, lastColHeaderIdx); } catch(Exception e) { - idx = addNode( - S_ATTRIB_NOT_SUPPORTED, 1, - m_ColAttrib_ISSEARCHABLE_TypeID, lastColHeaderIdx, idx); + addAttributeToNode( + S_ATTRIB_NOT_SUPPORTED, + m_ColAttrib_ISSEARCHABLE_TypeID, lastColHeaderIdx); } +*/ } + } /** @@ -461,6 +514,12 @@ private void createExpandedNameTable() { + m_Document_TypeID = + m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_DOCUMENT, DTM.DOCUMENT_NODE); + + m_TextNode_TypeID = + m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_TEXT_NODE, DTM.TEXT_NODE); + m_ColumnHeader_TypeID = m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_COLUMN_HEADER, DTM.ELEMENT_NODE); m_RowSet_TypeID = @@ -505,26 +564,54 @@ m_expandedNameTable.getExpandedTypeID(S_NAMESPACE, S_ISSEARCHABLE, DTM.ATTRIBUTE_NODE); } - private int addNode(Object o, int level, int extendedType, int parent, int prevsib) + /** + * 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) { - int node = DTM.NULL; - // Need to keep this counter going even if we don't use it. m_size++; + return m_ObjectArray.append(o); + } + + private 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; + } + + private int addElement(int level, int extendedType, int parent, int prevsib) + { + int node = DTM.NULL; + try { // Add the Node and adjust its Extended Type - node = m_ObjectArray.append(o); + 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); - // Fixup the previous sibling - // So if there was a previous sibling, chain into them. - - // As a precaution, always set the next sibling - m_nextsib.setElementAt(DTM.NULL, 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) { @@ -536,12 +623,8 @@ // Tell the proevious sibling that they have a new bother/sister. m_nextsib.setElementAt(node, prevsib); } - - // Set this value even if we change it later - m_parent.setElementAt(parent, node); - // Fix up the Parent, Since we don't track f ththe last child, then - // So if we have a valid parent and the new node ended up being first + // 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 @@ -560,6 +643,87 @@ 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. + * + */ + private 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) + { + // Let's just return DTM.NULL now + error(""); + } + + 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. + */ + private 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) + { + // Let's just return DTM.NULL now + error("Cloning attributes"); + } + } + private boolean addRowToDTMFromResultSet() { try @@ -569,19 +733,33 @@ // If this is the first time here, start the new level if (m_FirstRowIdx == DTM.NULL) { - m_FirstRowIdx = addNode(null,2, m_Row_TypeID, m_RowSetIdx, DTM.NULL); + m_FirstRowIdx = + addElement(2, m_Row_TypeID, m_RowSetIdx, m_ColHeadersIdx[m_ColCount-1]); m_LastRowIdx = m_FirstRowIdx; } else { - m_LastRowIdx = addNode(null,2, m_Row_TypeID, m_RowSetIdx, m_LastRowIdx); + m_LastRowIdx = addElement(2, m_Row_TypeID, m_RowSetIdx, m_LastRowIdx); } + + int colID = DTM.NULL; + + // Columns in JDBC Start at 1 and go to the Extent + for (int i=1; i<= m_ColCount; i++) + { + // Just grab the Column Object Type, we will convert it to a string + // later. + Object o = m_ResultSet.getObject(i); + colID = addElementWithData(o,3,m_Col_TypeID, m_LastRowIdx, colID); +// cloneAttributeFromNode(colID, m_ColHeadersIdx[i-1]); + } } catch(Exception e) { error("SQL Error Fetching next row [" + e.getLocalizedMessage() + "]"); } + // Only do a single row... return false; } @@ -618,11 +796,242 @@ } } + 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); + 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); + 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 addRowToDTMFromResultSet(); + } + + + 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); + } + } + + /*********************************************************************/ + /*********************************************************************/ + /******************* End of Functions we Wrote ***********************/ + /*********************************************************************/ + /*********************************************************************/ + + /** + * @param parm1 + * @return + */ protected int getNextNodeIdentity( int parm1 ) { if (DEBUG) System.out.println("getNextNodeIdenty(" + parm1 + ")"); @@ -683,68 +1092,11 @@ } return getLocalNameFromExpandedNameID(exID); } - - /** - * @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; - } - - /** - * @return - */ - protected int getNumberOfNodes( ) - { - if (DEBUG) System.out.println("getNumberOfNodes()"); - return 0; - } - - /** + /** * @param parm1 * @return */ - public String getNodeValue( int parm1 ) - { - if (DEBUG) System.out.println("getNodeValue(" + parm1 + ")"); - return ""; - } - - /** - * @param parm1 - * @return - */ public boolean isAttributeSpecified( int parm1 ) { if (DEBUG) System.out.println("isAttributeSpecified(" + parm1 + ")"); @@ -801,31 +1153,11 @@ /** * @return */ - protected boolean nextNode( ) - { - if (DEBUG) System.out.println("nextNode()"); - return addRowToDTMFromResultSet(); - } - - /** - * @return - */ public LexicalHandler getLexicalHandler( ) { if (DEBUG) System.out.println("getLexicalHandler()"); return null; } - - /** - * @param parm1 - * @return - */ - public XMLString getStringValue( int parm1 ) - { - if (DEBUG) System.out.println("getStringValue(" + parm1 + ")"); - return null; - } - /** * @return */ @@ -950,7 +1282,9 @@ public String getNodeNameX(int parm1) { if (DEBUG) System.out.println("getNodeNameX(" + parm1 + ")"); - return super.getNodeNameX( parm1); + //return super.getNodeNameX( parm1); + return getNodeName(parm1); + } public void setFeature(String parm1, boolean parm2) @@ -1026,11 +1360,6 @@ return super.isSupported( parm1, parm2); } - public void dumpDTM() - { - if (DEBUG) System.out.println("dumpDTM()"); - super.dumpDTM(); - } protected void setShouldStripWhitespace(boolean parm1) { @@ -1155,12 +1484,6 @@ return super.getNodeType( parm1); } - public int getNextAttribute(int parm1) - { - if (DEBUG) System.out.println("getNextAttribute(" + parm1 + ")"); - return super.getNextAttribute( parm1); - } - public boolean isCharacterElementContentWhitespace(int parm1) { if (DEBUG) System.out.println("isCharacterElementContentWhitespace(" + parm1 +")"); @@ -1246,11 +1569,6 @@ super.error( parm1); } - public int getFirstAttribute(int parm1) - { - if (DEBUG) System.out.println("getFirstAttribute("+parm1+")"); - return super.getFirstAttribute( parm1); - } protected int _firstch(int parm1) { @@ -1329,27 +1647,40 @@ if (DEBUG) System.out.println("getAxisIterator("+parm1+")"); return super.getAxisIterator( parm1); } - /** - * 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 + * @param parm1 + * @return */ - public void setProperty(String property, Object value) + public int getElementById( String parm1 ) { + if (DEBUG) System.out.println("getElementByID("+parm1+")"); + return DTM.NULL; } - + /** - * No source information is available for DOM2DTM, so return - * <code>null</code> here. - * - * @param node an <code>int</code> value - * @return null + * @return */ - public javax.xml.transform.SourceLocator getSourceLocatorFor(int node) + 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]
