View Javadoc

1   package net.sourceforge.pmd.lang.ast.xpath.saxon;
2   
3   import java.util.HashMap;
4   import java.util.Iterator;
5   import java.util.Map;
6   
7   import net.sf.saxon.om.Axis;
8   import net.sf.saxon.om.AxisIterator;
9   import net.sf.saxon.om.DocumentInfo;
10  import net.sf.saxon.om.Navigator;
11  import net.sf.saxon.om.NodeInfo;
12  import net.sf.saxon.om.SingleNodeIterator;
13  import net.sf.saxon.type.Type;
14  import net.sourceforge.pmd.lang.ast.Node;
15  
16  /**
17   * A Saxon OM Document node for an AST Node.
18   */
19  public class DocumentNode extends AbstractNodeInfo implements DocumentInfo {
20  
21      /**
22       * The root ElementNode of the DocumentNode.
23       */
24      protected final ElementNode rootNode;
25  
26      /**
27       * Mapping from AST Node to corresponding ElementNode.
28       */
29      public final Map<Node, ElementNode> nodeToElementNode = new HashMap<Node, ElementNode>();
30  
31      /**
32       * Construct a DocumentNode, with the given AST Node serving as the root
33       * ElementNode.
34       * 
35       * @param node The root AST Node.
36       * 
37       * @see ElementNode
38       */
39      public DocumentNode(Node node) {
40  	this.rootNode = new ElementNode(this, new IdGenerator(), null, node, -1);
41      }
42  
43      /**
44       * {@inheritDoc}
45       */
46      public String[] getUnparsedEntity(String name) {
47  	throw createUnsupportedOperationException("DocumentInfo.getUnparsedEntity(String)");
48      }
49  
50      /**
51       * {@inheritDoc}
52       */
53      public Iterator getUnparsedEntityNames() {
54  	throw createUnsupportedOperationException("DocumentInfo.getUnparsedEntityNames()");
55      }
56  
57      /**
58       * {@inheritDoc}
59       */
60      public NodeInfo selectID(String id) {
61  	throw createUnsupportedOperationException("DocumentInfo.selectID(String)");
62      }
63  
64      @Override
65      public int getNodeKind() {
66  	return Type.DOCUMENT;
67      }
68  
69      @Override
70      public DocumentInfo getDocumentRoot() {
71  	return this;
72      }
73  
74      @Override
75      public boolean hasChildNodes() {
76  	return true;
77      }
78  
79      @Override
80      public AxisIterator iterateAxis(byte axisNumber) {
81  	switch (axisNumber) {
82  	case Axis.DESCENDANT:
83  	    return new Navigator.DescendantEnumeration(this, false, true);
84  	case Axis.DESCENDANT_OR_SELF:
85  	    return new Navigator.DescendantEnumeration(this, true, true);
86  	case Axis.CHILD:
87  	    return SingleNodeIterator.makeIterator(rootNode);
88  	default:
89  	    return super.iterateAxis(axisNumber);
90  	}
91      }
92  }