001 package org.shiftone.jrat.provider.tree.ui.hierarchy;
002
003 import org.jdesktop.swingx.treetable.AbstractTreeTableModel;
004 import org.shiftone.jrat.desktop.util.Table;
005 import org.shiftone.jrat.provider.tree.ui.hierarchy.nodes.HierarchyNode;
006 import org.shiftone.jrat.provider.tree.ui.hierarchy.nodes.MethodHierarchyNode;
007 import org.shiftone.jrat.provider.tree.ui.hierarchy.nodes.PackageHierarchyNode;
008
009 import java.util.List;
010
011 /**
012 * @author jeff@shiftone.org (Jeff Drost)
013 */
014 public class HierarchyTreeTableModel extends AbstractTreeTableModel {
015
016 public static final Table TABLE = new Table();
017 public static final Table.Column CLASS = TABLE.column("Class");
018 public static final Table.Column METHODS = TABLE.column("Methods");
019 public static final Table.Column TOTAL_EXITS = TABLE.column("Exists", false);
020 public static final Table.Column UNCALLED = TABLE.column("Uncalled", false);
021 public static final Table.Column COVERAGE = TABLE.column("Coverage %", false);
022 public static final Table.Column EXCEPTIONS = TABLE.column("Exceptions", false);
023 public static final Table.Column ERROR_RATE = TABLE.column("Error Rate", false);
024 public static final Table.Column TOTAL = TABLE.column("Total ms", false);
025 public static final Table.Column TOTAL_METHOD = TABLE.column("Total Method ms");
026 public static final Table.Column PERCENT_METHOD = TABLE.column("Method Time %");
027
028 private final PackageHierarchyNode root;
029
030 public HierarchyTreeTableModel(PackageHierarchyNode root) {
031 this.root = root;
032 }
033
034 public static List getColumns() {
035 return TABLE.getColumns();
036 }
037
038 public Class getColumnClass(int i) {
039 return TABLE.getColumn(i).getType();
040 }
041
042 public int getColumnCount() {
043 return TABLE.getColumnCount();
044 }
045
046 public String getColumnName(int i) {
047 return TABLE.getColumn(i).getName();
048 }
049
050 public Object getValueAt(Object o, int i) {
051
052 HierarchyNode node = (HierarchyNode) o;
053
054 if (CLASS.getIndex() == i) {
055 return o.toString();
056 }
057 if (METHODS.getIndex() == i) {
058 return getTotalMethods(node);
059 }
060 if (UNCALLED.getIndex() == i) {
061 return getUncalledMethods(node);
062 }
063 if (COVERAGE.getIndex() == i) {
064 return node.getCoverage();
065 }
066 if (TOTAL.getIndex() == i) {
067 return new Long(node.getTotalDuration());
068 }
069 if (TOTAL_METHOD.getIndex() == i) {
070 return node.getTotalMethodDuration();
071 }
072 if (PERCENT_METHOD.getIndex() == i) {
073 return node.getTotalMethodPercent();
074 }
075 if (TOTAL_EXITS.getIndex() == i) {
076 return new Long(node.getTotalExits());
077 }
078 if (EXCEPTIONS.getIndex() == i) {
079 return new Long(node.getTotalErrors());
080 }
081 if (ERROR_RATE.getIndex() == i) {
082 return node.getErrorRate();
083 }
084 return null;
085 }
086
087 private static Integer getTotalMethods(HierarchyNode node) {
088 return (node instanceof MethodHierarchyNode) ? null : new Integer(node.getTotalMethods());
089 }
090
091 private static Integer getUncalledMethods(HierarchyNode node) {
092 return (node instanceof MethodHierarchyNode) ? null : new Integer(node.getUncalledMethods());
093 }
094
095 public boolean isCellEditable(Object o, int i) {
096 return false;
097 }
098
099 public void setValueAt(Object o, Object o1, int i) {
100 throw new UnsupportedOperationException();
101 }
102
103 public Object getRoot() {
104 return root;
105 }
106
107 public Object getChild(Object parent, int index) {
108 return node(parent).getChild(index);
109 }
110
111 public int getChildCount(Object parent) {
112 return node(parent).getChildCount();
113 }
114
115 public int getIndexOfChild(Object parent, Object child) {
116 return node(parent).getIndexOfChild((HierarchyNode) child);
117 }
118
119 public boolean isLeaf(Object o) {
120 return node(o).isLeaf();
121 }
122
123 private HierarchyNode node(Object o) {
124 return (HierarchyNode) o;
125 }
126 }