blob: a45c57bc650bd4dae4303f7f949183002347eeea [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id$
*/
package org.apache.qetest.dtm;
import org.apache.xml.dtm.Axis;
import org.apache.xml.dtm.DTM;
public class TimeDTMIterator
{
public static void main(String argv[])
{
System.out.println("\n#### Timing Iterations of DEEP documents. ####");
StringBuffer buf = new StringBuffer();
int lastNode = 0;
String lastNodeName;
int[] rtData = {0,0,0}; // returns Traversal time, last node, number of nodes traversed
// Preload once to prime the JVM.
DTM dtm = QeDtmUtils.createDTM(0, QeDtmUtils.deepFile, buf);
// Time the creation of the dtm
buf.setLength(0);
dtm = QeDtmUtils.createDTM(0, QeDtmUtils.deepFile, buf);
buf.setLength(0);
dtm = QeDtmUtils.createDTM(0, QeDtmUtils.deepFile, buf);
buf.setLength(0);
dtm = QeDtmUtils.createDTM(0, QeDtmUtils.deepFile, buf);
// Get various nodes to use as context nodes.
int dtmRoot = dtm.getDocument(); // #document
String dtmRootName = dtm.getNodeName(dtmRoot); // Used for output
int DNode = dtm.getFirstChild(dtmRoot); // <Doc>
String DNodeName = dtm.getNodeName(DNode);
int ANode = dtm.getFirstChild(DNode); // <A>
String ANodeName = dtm.getNodeName(ANode);
// Get a traverser for Descendant:: axis.
System.out.println("\n* DESCENDANT from "+"<"+DNodeName+">");
QeDtmUtils.timeAxisIterator(dtm, Axis.DESCENDANT, DNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Descendant:: axis.
System.out.println("\n* DESCENDANT-OR-SELF from "+"<"+DNodeName+">");
QeDtmUtils.timeAxisIterator(dtm, Axis.DESCENDANTORSELF, DNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Use last node from Child traverse as Context node for subsequent traversals
lastNode = rtData[1];
lastNodeName = dtm.getNodeName(lastNode);
// Get a traverser for Ancestor:: axis.
System.out.println("\n* ANCESTOR from "+"<"+lastNodeName+">");
QeDtmUtils.timeAxisIterator(dtm, Axis.ANCESTOR, lastNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Ancestor:: axis.
System.out.println("\n* ANCESTOR-OR-SELF from "+"<"+lastNodeName+">");
QeDtmUtils.timeAxisIterator(dtm, Axis.ANCESTORORSELF, lastNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
System.out.println("\n#### Testing Iteration of FLAT documents. ####");
buf.setLength(0);
DTM dtm2 = QeDtmUtils.createDTM(0, QeDtmUtils.flatFile, buf);
buf.setLength(0);
dtm2 = QeDtmUtils.createDTM(0, QeDtmUtils.flatFile, buf);
buf.setLength(0);
dtm2 = QeDtmUtils.createDTM(0, QeDtmUtils.flatFile, buf);
buf.setLength(0);
dtm2 = QeDtmUtils.createDTM(0, QeDtmUtils.flatFile, buf);
buf.setLength(0);
dtm2 = QeDtmUtils.createDTM(0, QeDtmUtils.flatFile, buf);
// Get various nodes to use as context nodes.
dtmRoot = dtm2.getDocument(); // #document
dtmRootName = dtm2.getNodeName(dtmRoot); // Used for output
DNode = dtm2.getFirstChild(dtmRoot); // <Doc>
DNodeName = dtm2.getNodeName(DNode);
int fiNode = dtm2.getFirstChild(DNode); // first <item>
String fiNodeName = dtm2.getNodeName(fiNode);
// Get a traverser for Child:: axis.
System.out.println("\n* CHILD from "+"<"+DNodeName+"> " + DNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.CHILD, DNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Following:: axis.
System.out.println("\n* FOLLOWING from "+"<"+fiNodeName+"> " + fiNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.FOLLOWING, fiNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Following-sibling:: axis.
System.out.println("\n* FOLLOWINGSIBLING from "+"<"+fiNodeName+"> " + fiNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.FOLLOWINGSIBLING, fiNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Descendant:: axis.
System.out.println("\n* DESCENDANT from "+"<"+DNodeName+"> " + DNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.DESCENDANT, DNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Use last node from Descendant traverse as Context node for subsequent traversals
lastNode = rtData[1];
lastNodeName = dtm2.getNodeName(lastNode);
// Get a traverser for Ancestor:: axis.
System.out.println("\n* ANCESTOR from "+"<"+lastNodeName+"> " + lastNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.ANCESTOR, lastNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Preceding:: axis.
System.out.println("\n* PRECEDING-SIBLING from "+"<"+lastNodeName+"> " + lastNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.PRECEDINGSIBLING, lastNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
// Get a traverser for Preceding:: axis.
System.out.println("\n* PRECEDING from "+"<"+lastNodeName+"> " + lastNode);
QeDtmUtils.timeAxisIterator(dtm2, Axis.PRECEDING, lastNode, rtData);
System.out.println("Time="+rtData[0] + " : " + "LastNode="+rtData[1]+" nodes="+rtData[2]);
}
}