File: NodeBase.java

package info (click to toggle)
libxt-java 0.19991105-5
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,908 kB
  • ctags: 2,762
  • sloc: java: 12,823; makefile: 52; xml: 46
file content (135 lines) | stat: -rw-r--r-- 3,120 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.jclark.xsl.dom;

import com.jclark.xsl.om.*;
import java.net.URL;

abstract class NodeBase implements Node {
  final org.w3c.dom.Node domNode;
  int level;
  private int childIndex;
  ContainerNode parent;
  RootNode root;

  NodeBase(org.w3c.dom.Node domNode) {
    this.domNode = domNode;
    childIndex = 0;
    level = 0;
  }

  NodeBase(org.w3c.dom.Node domNode, ContainerNode parent, int childIndex) {
    this.domNode = domNode;
    this.parent = parent;
    this.root = parent.root;
    this.childIndex = childIndex;
    this.level = parent.level + 1;
  }

  public Node getParent() {
    return parent;
  }

  public String getGeneratedId() {
    return parent.getGeneratedId() + "." + Integer.toString(childIndex);
  }

  public int compareTo(Node node) {
    NodeBase other = (NodeBase)node;
    if (root == other.root)
      return compare(this, other);
    return root.compareRootTo(other.root);
  }

  private static final int compare(NodeBase node1, NodeBase node2) {
    int level1 = node1.level;
    int level2 = node2.level;
    int levelDiff = level1 - level2;
    while (level1 > level2) {
      node1 = node1.parent;
      level1--;
    }
    while (level2 > level1) {
      node2 = node2.parent;
      level2--;
    }
    int ret = compareSameLevel(node1, node2);
    if (ret != 0)
      return ret;
    return levelDiff;
  }

  private static final int compareSameLevel(NodeBase node1, NodeBase node2) {
    if (node1.level == 0)
      return 0;
    if (node1.domNode.equals(node2.domNode))
      return 0;
    int ret = compareSameLevel(node1.parent, node2.parent);
    if (ret != 0)
      return ret;
    return node1.childIndex - node2.childIndex;
  }

  public String getData() {
    return null;
  }

  public Name getName() {
    return null;
  }

  public String getAttributeValue(Name name) {
    return null;
  }

  public Node getAttribute(Name name) {
    return null;
  }

  public Node getElementWithId(String id) {
    return root.getElementWithId(id);
  }

  public boolean isId(String id) {
    return root.isId(domNode, id);
  }

  public NamespacePrefixMap getNamespacePrefixMap() {
    return parent.getNamespacePrefixMap();
  }

  public String getUnparsedEntityURI(String name) {
    return root.getUnparsedEntityURI(name);
  }

  public SafeNodeIterator getChildren() {
    return NullNodeIterator.getInstance();
  }

  public SafeNodeIterator getAttributes() {
    return NullNodeIterator.getInstance();
  }

  public URL getURL() {
    return root.getURL();
  }

  public int getLineNumber() {
    return -1;
  }

  public SafeNodeIterator getFollowingSiblings() {
    SafeNodeIterator iter = new SiblingNodeIterator(parent, childIndex, domNode);
    iter.next();
    return iter;
  }

  public boolean equals(Object obj) {
    if (obj == null)
      return false;
    if (!(obj instanceof NodeBase))
      return false;
    return ((NodeBase)obj).domNode.equals(domNode);
  }
  public Node getRoot() {
    return root;
  }
}