001    package org.shiftone.jrat.provider.tree.ui.summary;
002    
003    import org.shiftone.jrat.desktop.util.Table;
004    import org.shiftone.jrat.util.Percent;
005    
006    import javax.swing.table.AbstractTableModel;
007    import java.util.List;
008    
009    /**
010     * @author jeff@shiftone.org (Jeff Drost)
011     */
012    public class SummaryTableModel extends AbstractTableModel {
013    
014        private static final Table TABLE = new Table();
015        public static final Table.Column PACKAGE = TABLE.column("Package", false);
016        public static final Table.Column CLASS = TABLE.column("Class");
017        public static final Table.Column METHOD = TABLE.column("Method");
018        public static final Table.Column SIGNATURE = TABLE.column("Signature", false);
019        public static final Table.Column ENTERS = TABLE.column("Enters", false);
020        public static final Table.Column EXITS = TABLE.column("Exits");
021        public static final Table.Column EXCEPTIONS = TABLE.column("Exceptions Thrown", false);
022        public static final Table.Column EXCEPTION_RATE = TABLE.column("Exception Rate", false);
023        public static final Table.Column UNCOMPLETED = TABLE.column("Uncompleted Calls", false);
024        public static final Table.Column TOTAL = TABLE.column("Total ms");
025        public static final Table.Column MIN = TABLE.column("Min ms", false);
026        public static final Table.Column MAX = TABLE.column("Max ms", false);
027        public static final Table.Column AVERAGE = TABLE.column("Average ms");
028        public static final Table.Column TOTAL_METHOD = TABLE.column("Total Method ms");
029        public static final Table.Column PERCENT_METHOD = TABLE.column("Method Time %");
030        public static final Table.Column AVERAGE_METHOD = TABLE.column("Average Method ms");
031        public static final Table.Column TOTAL_CALLERS = TABLE.column("Total Callers", false);
032    
033    
034        private final MethodSummaryModel summaryModel;
035        private final List methodSummaryList;
036    
037        public SummaryTableModel(MethodSummaryModel summaryModel) {
038            this.summaryModel = summaryModel;
039            this.methodSummaryList = summaryModel.getMethodSummaryList();
040        }
041    
042        public Object getValueAt(int rowIndex, int columnIndex) {
043            MethodSummary summary = (MethodSummary) methodSummaryList.get(rowIndex);
044    
045            if (columnIndex == PACKAGE.getIndex()) {
046                return summary.getMethodKey().getPackageName();
047            }
048            if (columnIndex == CLASS.getIndex()) {
049                return summary.getMethodKey().getClassName();
050            }
051            if (columnIndex == METHOD.getIndex()) {
052                return summary.getMethodKey().getShortMethodDescription();
053            }
054            if (columnIndex == SIGNATURE.getIndex()) {
055                return summary.getMethodKey().getSig().getShortText();
056            }
057            if (columnIndex == ENTERS.getIndex()) {
058                return new Long(summary.getTotalEnters());
059            }
060            if (columnIndex == EXITS.getIndex()) {
061                return new Long(summary.getTotalExists());
062            }
063            if (columnIndex == EXCEPTIONS.getIndex()) {
064                return new Long(summary.getTotalErrors());
065            }
066            if (columnIndex == EXCEPTION_RATE.getIndex()) {
067                return summary.getErrorRate();
068            }
069            if (columnIndex == UNCOMPLETED.getIndex()) {
070                return new Long(summary.getUncompletedCalls());
071            }
072            if (columnIndex == TOTAL.getIndex()) {
073                return new Long(summary.getTotalDuration());
074            }
075            if (columnIndex == MIN.getIndex()) {
076                return summary.getMinDuration();
077            }
078            if (columnIndex == MAX.getIndex()) {
079                return summary.getMaxDuration();
080            }
081            if (columnIndex == AVERAGE.getIndex()) {
082                return summary.getAverageDuration();
083            }
084            if (columnIndex == TOTAL_METHOD.getIndex()) {
085                return summary.getTotalMethodDuration();
086            }
087            if (columnIndex == AVERAGE_METHOD.getIndex()) {
088                return summary.getAverageMethodDuration();
089            }
090            if (columnIndex == TOTAL_CALLERS.getIndex()) {
091                return new Integer(summary.getTotalCallers());
092            }
093    
094            if (columnIndex == PERCENT_METHOD.getIndex()) {
095                return getPercent(summary);
096            }
097    
098            throw new IllegalArgumentException("columnIndex = " + columnIndex);
099        }
100    
101        private Percent getPercent(MethodSummary summary) {
102            Long tmd = summary.getTotalMethodDuration();
103            return (tmd == null)
104                    ? null
105                    : new Percent((double) tmd.longValue() * 100.0 / (double) summaryModel.getTotalMethodDuration());
106        }
107    
108        public static List getColumns() {
109            return TABLE.getColumns();
110        }
111    
112        public int getRowCount() {
113            return methodSummaryList.size();
114        }
115    
116        public int getColumnCount() {
117            return TABLE.getColumnCount();
118        }
119    
120        public String getColumnName(int column) {
121            return TABLE.getColumn(column).getName();
122        }
123    
124    
125    }