001 package org.shiftone.jrat.provider.tree.ui.summary; 002 003 import org.shiftone.jrat.core.MethodKey; 004 import org.shiftone.jrat.provider.tree.ui.TraceTreeNode; 005 006 import java.util.*; 007 008 /** 009 * @author (jeff@shiftone.org) Jeff Drost 010 */ 011 public class MethodSummaryModel { 012 013 private final List methodList = new ArrayList(); // <MethodSummary> 014 private final Map methodMap = new HashMap(); // <MethodKey, MethodSummary> 015 private final long totalMethodDuration; 016 017 public MethodSummaryModel(TraceTreeNode node) { 018 process(node); 019 totalMethodDuration = calculateTotalMethodDuration(); 020 } 021 022 023 public long getTotalMethodDuration() { 024 return totalMethodDuration; 025 } 026 027 private long calculateTotalMethodDuration() { 028 long duration = 0; 029 for (Iterator i = methodList.iterator(); i.hasNext();) { 030 MethodSummary summary = (MethodSummary) i.next(); 031 Long d = (Long) summary.getTotalMethodDuration(); 032 if (d != null) { 033 duration += d.longValue(); 034 } 035 } 036 return duration; 037 } 038 039 040 private void process(TraceTreeNode node) { 041 042 if (!node.isRootNode()) { 043 MethodKey methodKey = node.getMethodKey(); 044 MethodSummary method = getMethod(methodKey); 045 method.addStatistics(node); 046 } 047 048 for (int i = 0; i < node.getChildCount(); i++) { 049 TraceTreeNode child = node.getChildNodeAt(i); 050 process(child); 051 } 052 } 053 054 055 private MethodSummary getMethod(MethodKey methodKey) { 056 MethodSummary summary = (MethodSummary) methodMap.get(methodKey); 057 if (summary == null) { 058 summary = new MethodSummary(methodKey); 059 methodMap.put(methodKey, summary); 060 methodList.add(summary); 061 } 062 return summary; 063 } 064 065 066 public List getMethodSummaryList() { 067 return Collections.unmodifiableList(methodList); 068 } 069 070 public Map getMethodSummaryMap() { 071 return Collections.unmodifiableMap(methodMap); 072 } 073 }