1 package net.sourceforge.pmd.lang.dfa.report;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 public abstract class AbstractReportNode {
7 private List<AbstractReportNode> childNodes = new ArrayList<AbstractReportNode>();
8 private AbstractReportNode parentNode = null;
9
10
11
12
13
14 private int numberOfViolations;
15
16
17
18
19 public abstract boolean equalsNode(AbstractReportNode arg0);
20
21
22
23
24 public AbstractReportNode getFirstChild() {
25 if (this.isLeaf()) {
26 return null;
27 }
28 return this.childNodes.get(0);
29 }
30
31
32
33
34 public AbstractReportNode getNextSibling() {
35 if (parentNode == null) {
36 return null;
37 }
38 int index = parentNode.getChildIndex(this);
39 if (index < 0) {
40 return null;
41 }
42 if (index >= parentNode.childNodes.size() - 1) {
43 return null;
44 }
45 return parentNode.childNodes.get(index + 1);
46 }
47
48
49
50
51 private int getChildIndex(AbstractReportNode child) {
52 for (int i = 0; i < childNodes.size(); i++) {
53 if (childNodes.get(i).equals(child)) {
54 return i;
55 }
56 }
57 return -1;
58 }
59
60
61
62
63 public void addFirst(AbstractReportNode child) {
64 childNodes.add(0, child);
65 child.parentNode = this;
66 }
67
68
69
70
71 public void add(AbstractReportNode child) {
72 childNodes.add(child);
73 child.parentNode = this;
74 }
75
76 public void addNumberOfViolation(int number) {
77 numberOfViolations += number;
78 }
79
80
81
82
83 public int getNumberOfViolations() {
84 return numberOfViolations;
85 }
86
87
88
89 public void childrenAccept(ReportVisitor visitor) {
90 for (int i = 0; i < childNodes.size(); i++) {
91 AbstractReportNode node = childNodes.get(i);
92 node.accept(visitor);
93 }
94 }
95
96 public void accept(ReportVisitor visitor) {
97 visitor.visit(this);
98 }
99
100 public AbstractReportNode getChildAt(int arg0) {
101 if (arg0 >= 0 && arg0 <= childNodes.size() - 1) {
102 return childNodes.get(arg0);
103 }
104 return null;
105 }
106
107 public int getChildCount() {
108 return childNodes.size();
109 }
110
111 public AbstractReportNode getParent() {
112 return parentNode;
113 }
114
115 public boolean isLeaf() {
116 return childNodes.isEmpty();
117 }
118
119 }