blob: 01b37a90b49a5d97a7b1be685cc0159bcf2ec8f1 [file] [log] [blame]
/**
* A simple testcase used to test DTM
* - construct a DTM document
* - set DTMStringPool pointers
* - create element and text nodes with default append
* - dump the content of the DTM document created
*
* Rewritten to create the document via a simulated SAX2 stream rather than
* using "internal" DTM interfaces.
*
*<P>Status - work in progress</p>
*/
import org.apache.xml.dtm.CustomStringPool;
import org.apache.xml.dtm.DTM;
import org.apache.xml.dtm.DTMDocumentImpl;
import org.apache.xml.dtm.DTMStringPool;
public class ComposeDTM {
DTMDocumentImpl newDoc;
// %REVIEW% Justify why CustomStringPool rather than DTMStringPool.
// (See %REVIEW% issue in CustomStringPool's comments.)
DTMStringPool symbolTable = new CustomStringPool();
public ComposeDTM() {};
public static void main(String[] argv) {
//try {
ComposeDTM cdtm = new ComposeDTM();
cdtm.constructDoc();
cdtm.newDoc.setNsNameTable(cdtm.symbolTable);
cdtm.newDoc.setLocalNameTable(cdtm.symbolTable);
cdtm.newDoc.setPrefixNameTable(cdtm.symbolTable);
cdtm.composeDoc();
cdtm.treeDump();
/*} catch (Exception e) {
System.out.println("DOMCompose::Exception: " + e);
}*/
}
public void printNode(int nodeHandle, java.io.PrintWriter pw)
{
pw.print("Node " + nodeHandle +" ) ");
int type = newDoc.getNodeType(nodeHandle);
pw.print("[type: "+ type +" (");
switch (type) {
case DTM.ATTRIBUTE_NODE: pw.print("ATTRIBUTE_NODE"); break;
case DTM.CDATA_SECTION_NODE: pw.print("CDATA_SECTION_NODE"); break;
case DTM.COMMENT_NODE: pw.print("COMMENT_NODE"); break;
case DTM.DOCUMENT_FRAGMENT_NODE: pw.print("DOCUMENT_FRAGMENT_NODE"); break;
case DTM.DOCUMENT_NODE: pw.print("DOCUMENT_NODE"); break;
case DTM.DOCUMENT_TYPE_NODE: pw.print("DOCUMENT_TYPE_NODE"); break;
case DTM.ELEMENT_NODE: pw.print("ELEMENT_NODE"); break;
case DTM.ENTITY_NODE: pw.print("ENTITY_NODE"); break;
case DTM.ENTITY_REFERENCE_NODE: pw.print("ENTITY_REFERENCE_NODE"); break;
case DTM.NOTATION_NODE: pw.print("NOTATION_NODE"); break;
case DTM.PROCESSING_INSTRUCTION_NODE: pw.print("PROCESSING_INSTRUCTION_NODE"); break;
case DTM.TEXT_NODE: pw.print("TEXT_NODE"); break;
default: pw.print("???");
}
pw.print(")]");
pw.print("[node name: " + newDoc.getNodeName(nodeHandle)+"]");
pw.print("[node value: " + newDoc.getNodeValue(nodeHandle)+"]");
pw.println("");
}
// instantiate a DTM document
public void constructDoc() {
newDoc = new DTMDocumentImpl(0);
}
// compose a PurchaseOrder document
public void composeDoc() {
int root, h, c1, c2, c3, c4, c1_text, c2_text, c3_text, c4_text;
String text;
try
{
newDoc.startDocument();
newDoc.startElement(null,"PurchaseOrderList","PurchaseOrderList", null);
// root.createAttribute("version", "1.1"));
for (int i = 0; i < 10; i++) {
newDoc.startElement(null,"PurchaseOrder","PurchaseOrder", null);
newDoc.startElement(null,"Item","Item", null);
// c1.createAttribute();
text="Basketball" + " - " + i;
newDoc.characters(text.toCharArray(),0,text.length());
newDoc.endElement(null, "Item", "Item");
newDoc.startElement(null,"Description","Description", null);
// c2.createAttribute();
text="Professional Leather Michael Jordan Signatured Basketball";
newDoc.characters(text.toCharArray(),0,text.length());
newDoc.endElement(null, "Description", "Description");
newDoc.startElement(null,"UnitPrice","UnitPrice", null);
text="$12.99";
newDoc.characters(text.toCharArray(),0,text.length());
newDoc.endElement(null, "UnitPrice", "UnitPrice");
newDoc.startElement(null,"Quantity","Quantity", null);
text="50";
newDoc.characters(text.toCharArray(),0,text.length());
newDoc.endElement(null, "Quantity", "Quantity");
newDoc.endElement(null, "PurchaseOrder", "PurchaseOrder");
}
newDoc.endElement(null, "PurchaseOrderList", "PurchaseOrderList");
newDoc.endDocument();
}
catch(org.xml.sax.SAXException e)
{
e.printStackTrace();
}
}
// traverse the PurchaseOrder document and print out the content
public void treeDump()
{
int root, node, node_child, node_sibling, node_name, node_value, node_type;
java.io.PrintWriter pwrt = null;
try {
java.io.FileOutputStream os = new java.io.FileOutputStream("dtmTreeDump.txt");
pwrt = new java.io.PrintWriter(os);
root = newDoc.getDocumentRoot();
System.out.println("Print out the document root element");
printNode(root, pwrt);
// root has children
if (newDoc.hasChildNodes(root)) {
// traverse through all children of the root
System.out.println("Print out first generation children");
node = newDoc.getFirstChild(root);
node_sibling = node;
int i= 1;
while (node_sibling != -1) {
System.out.println("Child " + i + " is:");
printNode(node_sibling, pwrt);
node_sibling = newDoc.getNextSibling(node_sibling);
i++;
}
// traverse through all descendant of the root, do this later after more generations
// of children are added to the root
}
} catch (java.io.IOException ioe) {
System.out.println("Could not dump DTM");
} finally {
pwrt.close();
}
}
}