001    package org.shiftone.jrat.provider.tree.ui.hierarchy.nodes;
002    
003    import org.shiftone.jrat.provider.tree.ui.summary.MethodSummaryModel;
004    import org.shiftone.jrat.util.Percent;
005    
006    import java.util.List;
007    
008    public abstract class HierarchyNode {
009    
010        private final MethodSummaryModel methodSummaryModel;
011        private static final HierarchyNode[] EMPTY = {};
012        private final String name;
013    
014    
015        public HierarchyNode(String name, MethodSummaryModel methodSummaryModel) {
016            this.name = name;
017            this.methodSummaryModel = methodSummaryModel;
018        }
019    
020        public String getName() {
021            return name;
022        }
023    
024        public String toString() {
025            return getName();
026        }
027    
028    
029        public MethodSummaryModel getMethodSummaryModel() {
030            return methodSummaryModel;
031        }
032    
033        public abstract void finalizeStatistics();
034    
035        public abstract long getTotalDuration();
036    
037        public abstract int getTotalMethods();
038    
039        public abstract int getExecutedMethods();
040    
041        public abstract long getTotalExits();
042    
043        public abstract long getTotalErrors();
044    
045        public abstract Long getTotalMethodDuration();
046    
047        public Percent getErrorRate() {
048            return new Percent((double) getTotalErrors() * 100.0 / (double) getTotalExits());
049        }
050    
051        public Percent getCoverage() {
052            return new Percent((double) getExecutedMethods() * 100.0 / (double) getTotalMethods());
053        }
054    
055        public int getUncalledMethods() {
056            return getTotalMethods() - getExecutedMethods();
057        }
058    
059        public Percent getTotalMethodPercent() {
060            Long tmd = getTotalMethodDuration();
061            return (tmd == null)
062                    ? null
063                    : new Percent((double) tmd.longValue() * 100.0 / (double) methodSummaryModel.getTotalMethodDuration());
064        }
065    
066        public abstract List getChildren();
067    
068        public boolean isLeaf() {
069            return getChildCount() == 0;
070        }
071    
072        public int getIndexOfChild(HierarchyNode node) {
073            for (int i = 0; i < getChildCount(); i++) {
074                if (node == getChild(i)) {
075                    return i;
076                }
077            }
078            return -1;
079        }
080    
081        public HierarchyNode getChild(int index) {
082            return (HierarchyNode) getChildren().get(index);
083        }
084    
085        public int getChildCount() {
086            return getChildren().size();
087        }
088    }