/* * FindBugs - Find bugs in Java programs * Copyright (C) 2003-2005, University of Maryland * Copyright (C) 2004 Dave Brosius <dbrosius@users.sourceforge.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs.gui; import java.awt.Color; import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import edu.umd.cs.findbugs.BugInstance; import edu.umd.cs.findbugs.ClassAnnotation; import edu.umd.cs.findbugs.Detector; import edu.umd.cs.findbugs.FieldAnnotation; import edu.umd.cs.findbugs.MethodAnnotation; import edu.umd.cs.findbugs.SourceLineAnnotation; /** * Custom cell renderer for the bug tree. * We use this to select the tree icons, and to set the * text color based on the bug priority. */ public class BugCellRenderer extends DefaultTreeCellRenderer { private static final BugCellRenderer theInstance = new BugCellRenderer(); /** * Get the single instance. * * @return the instance */ public static BugCellRenderer instance() { return theInstance; } private static final long serialVersionUID = 1L; private ImageIcon bugGroupIcon; private ImageIcon packageIcon; private ImageIcon bugIcon; private ImageIcon classIcon; private ImageIcon methodIcon; private ImageIcon fieldIcon; private ImageIcon sourceFileIcon; private Object value; private BugCellRenderer() { ClassLoader classLoader = this.getClass().getClassLoader(); bugGroupIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/bug.png")); packageIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/package.png")); bugIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/bug2.png")); classIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/class.png")); methodIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/method.png")); fieldIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/field.png")); sourceFileIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/sourcefile.png")); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object obj = node.getUserObject(); this.value = obj; super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); // Set the icon, depending on what kind of node it is if (obj instanceof BugInstance) { setIcon(bugIcon); } else if (obj instanceof ClassAnnotation) { setIcon(classIcon); } else if (obj instanceof MethodAnnotation) { setIcon(methodIcon); } else if (obj instanceof FieldAnnotation) { setIcon(fieldIcon); } else if (obj instanceof SourceLineAnnotation) { setIcon(sourceFileIcon); } else if (obj instanceof BugInstanceGroup) { // This is a "group" node BugInstanceGroup groupNode = (BugInstanceGroup) obj; String groupType = groupNode.getGroupType(); if (groupType == FindBugsFrame.GROUP_BY_CLASS) { setIcon(classIcon); } else if (groupType == FindBugsFrame.GROUP_BY_PACKAGE) { setIcon(packageIcon); } else if (groupType == FindBugsFrame.GROUP_BY_BUG_TYPE) { setIcon(bugGroupIcon); } else if (groupType == FindBugsFrame.GROUP_BY_BUG_CATEGORY) { setIcon(bugGroupIcon); } } else { setIcon(null); } return this; } @Override public Color getTextNonSelectionColor() { return getCellTextColor(); } private Color getCellTextColor() { // Based on the priority, color-code the bug instance. Color color = Color.BLACK; if (value instanceof BugInstance) { BugInstance bugInstance = (BugInstance) value; switch (bugInstance.getPriority()) { case Detector.EXP_PRIORITY: color = FindBugsFrame.EXP_PRIORITY_COLOR; break; case Detector.LOW_PRIORITY: color = FindBugsFrame.LOW_PRIORITY_COLOR; break; case Detector.NORMAL_PRIORITY: color = FindBugsFrame.NORMAL_PRIORITY_COLOR; break; case Detector.HIGH_PRIORITY: color = FindBugsFrame.HIGH_PRIORITY_COLOR; break; } } return color; } }