View Javadoc

    1   package net.sourceforge.pmd.dfa.report;
    2
    3   import java.util.ArrayList;
    4
    5   public abstract class AbstractReportNode {
    6       private ArrayList childNodes = new ArrayList();
    7       private AbstractReportNode parentNode = null;
    8
    9       /*
    10      * Number of all RuleViolations down to this node. At the moment it will
    11      * only be calculated by running the ReportHTMLPrintVisitor.
    12      * */
    13      private int numberOfViolations;
    14
    15      /***
    16       * Should compare to nodes of the tree.
    17       */
    18      public abstract boolean equalsNode(AbstractReportNode arg0);
    19
    20      /***
    21       * @return null If there isn't any child.
    22       */
    23      public AbstractReportNode getFirstChild() {
    24          if (this.isLeaf()) {
    25              return null;
    26          }
    27          return (AbstractReportNode) this.childNodes.get(0);
    28      }
    29
    30      /***
    31       * @return null If there isn't any sibling.
    32       */
    33      public AbstractReportNode getNextSibling() {
    34          if (this.parentNode == null) {
    35              return null;
    36          }
    37          int index = this.parentNode.getChildIndex(this);
    38          if (index < 0) {
    39              return null;
    40          }
    41          if (index >= this.parentNode.childNodes.size() - 1) {
    42              return null;
    43          }
    44          return (AbstractReportNode) this.parentNode.childNodes.get(index + 1);
    45      }
    46
    47      /***
    48       * @return index The index of the x-th child of his parent.
    49       */
    50      private int getChildIndex(AbstractReportNode child) {
    51          for (int i = 0; i < this.childNodes.size(); i++) {
    52              if (this.childNodes.get(i).equals(child)) {
    53                  return i;
    54              }
    55          }
    56          return -1;
    57      }
    58
    59      /***
    60       * Adds the child in front of any other childs.
    61       */
    62      public void addFirst(AbstractReportNode child) {
    63          this.childNodes.add(0, child);
    64          child.parentNode = this;
    65      }
    66
    67      /***
    68       * Adds the child at the end.
    69       */
    70      public void add(AbstractReportNode child) {
    71          this.childNodes.add(child);
    72          child.parentNode = this;
    73      }
    74
    75      public void addNumberOfViolation(int number) {
    76          this.numberOfViolations += number;
    77      }
    78
    79      /***
    80       * @return The number of all violations downside the node.
    81       */
    82      public int getNumberOfViolations() {
    83          return numberOfViolations;
    84      }
    85
    86      // ----------------------------------------------------------------------------
    87      // visitor methods
    88      public void childrenAccept(ReportVisitor visitor) {
    89          for (int i = 0; i < childNodes.size(); i++) {
    90              AbstractReportNode node = (AbstractReportNode) childNodes.get(i);
    91              node.accept(visitor);
    92          }
    93      }
    94
    95      public void accept(ReportVisitor visitor) {
    96          visitor.visit(this);
    97      }
    98
    99      public AbstractReportNode getChildAt(int arg0) {
    100         if (arg0 >= 0 && arg0 <= this.childNodes.size() - 1) {
    101             return (AbstractReportNode) this.childNodes.get(arg0);
    102         }
    103         return null;
    104     }
    105
    106     public int getChildCount() {
    107         return this.childNodes.size();
    108     }
    109
    110     public AbstractReportNode getParent() {
    111         return this.parentNode;
    112     }
    113
    114     public boolean isLeaf() {
    115         return this.childNodes.isEmpty();
    116     }
    117
    118 }