001 package org.shiftone.jrat.provider.tree.ui.hierarchy.nodes;
002
003 import org.shiftone.jrat.provider.tree.ui.summary.MethodSummaryModel;
004
005 import java.util.ArrayList;
006 import java.util.Iterator;
007 import java.util.List;
008
009 /**
010 * @author jeff@shiftone.org (Jeff Drost)
011 */
012 public class PackageHierarchyNode extends HierarchyNode {
013
014
015 private List childPackages = new ArrayList();
016 private List childClasses = new ArrayList();
017 private int totalMethods;
018 private int executedMethods;
019 private long totalDuration;
020 private long totalMethodDuration;
021 private long totalErrors;
022 private long totalExits;
023
024 public PackageHierarchyNode(String name, MethodSummaryModel methodSummaryModel) {
025 super(name, methodSummaryModel);
026
027 }
028
029 public void finalizeStatistics() {
030
031 for (Iterator i = childPackages.iterator(); i.hasNext();) {
032 PackageHierarchyNode node = (PackageHierarchyNode) i.next();
033 addStatistics(node);
034 }
035 for (Iterator i = childClasses.iterator(); i.hasNext();) {
036 ClassHierarchyNode node = (ClassHierarchyNode) i.next();
037 addStatistics(node);
038 }
039
040 }
041
042 private void addStatistics(HierarchyNode node) {
043
044 node.finalizeStatistics();
045
046 totalMethods += node.getTotalMethods();
047 executedMethods += node.getExecutedMethods();
048 totalDuration += node.getTotalDuration();
049 totalErrors += node.getTotalErrors();
050 totalExits += node.getTotalExits();
051
052 Long tmd = node.getTotalMethodDuration();
053 if (tmd != null) {
054 totalMethodDuration += tmd.longValue();
055 }
056 }
057
058
059 public Long getTotalMethodDuration() {
060 return new Long(totalMethodDuration);
061 }
062
063 public int getTotalMethods() {
064 return totalMethods;
065 }
066
067 public int getExecutedMethods() {
068 return executedMethods;
069 }
070
071 public long getTotalDuration() {
072 return totalDuration;
073 }
074
075
076 public long getTotalExits() {
077 return totalExits;
078 }
079
080 public long getTotalErrors() {
081 return totalErrors;
082 }
083
084 public List getChildren() {
085 List list = new ArrayList();
086 list.addAll(childPackages);
087 list.addAll(childClasses);
088 return list;
089 }
090
091 public void addClass(ClassHierarchyNode classNode) {
092 childClasses.add(classNode);
093 }
094
095
096 public void addPackage(PackageHierarchyNode packageNode) {
097 childPackages.add(packageNode);
098 }
099
100 /**
101 * Retreves the child package with the provided name or creates it if it
102 * does not exist.
103 */
104 public PackageHierarchyNode getChildPackage(String name) {
105 for (int i = 0; i < childPackages.size(); i++) {
106 PackageHierarchyNode child = (PackageHierarchyNode) childPackages.get(i);
107 if (child.getName().equals(name)) {
108 return child;
109 }
110 }
111 PackageHierarchyNode node = new PackageHierarchyNode(name, getMethodSummaryModel());
112 addPackage(node);
113 return node;
114 }
115
116 public PackageHierarchyNode getChildPackage(String[] nameParts) {
117 if (nameParts.length == 0) {
118 return this;
119 }
120
121 PackageHierarchyNode current = getChildPackage(nameParts[0]);
122 for (int i = 1; i < nameParts.length; i++) {
123 current = current.getChildPackage(nameParts[i]);
124 }
125 return current;
126 }
127
128
129 /**
130 * Retreves the child class with the provided name or creates it if it does
131 * not exist.
132 */
133 public ClassHierarchyNode getChildClass(String name) {
134 for (int i = 0; i < childClasses.size(); i++) {
135 ClassHierarchyNode child = (ClassHierarchyNode) childClasses.get(i);
136 if (child.getName().equals(name)) {
137 return child;
138 }
139 }
140 ClassHierarchyNode node = new ClassHierarchyNode(name, getMethodSummaryModel());
141 addClass(node);
142 return node;
143 }
144
145 }