package com.ibm.nmon.gui.tree; import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import com.ibm.nmon.data.DataSet; import com.ibm.nmon.data.DataType; import com.ibm.nmon.data.Process; import com.ibm.nmon.gui.Styles; final class TreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = -2417103407578950522L; private static final ImageIcon DATATYPE_ICON = Styles.buildIcon("package.png"); private static final ImageIcon DATASUBTYPE_ICON = Styles.buildIcon("package_green.png"); private static final ImageIcon FIELD_ICON = Styles.buildIcon("page.png"); private static final ImageIcon PROCESS_ICON = Styles.buildIcon("cog.png"); @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); Object o = ((DefaultMutableTreeNode) value).getUserObject(); if (o instanceof DataSet) { setIcon(Styles.COMPUTER_ICON); setToolTipText(null); } else if (o instanceof DataType) { setIcon(DATATYPE_ICON); setToolTipText(((DataType) o).getName()); } else if (o instanceof Process) { setIcon(PROCESS_ICON); // Show the command line on Process nodes // Truncate names longer than 100 characters String commandLine = ((Process) o).getCommandLine(); if (commandLine.length() > 0) { if (commandLine.length() > 100) { commandLine = commandLine.substring(0, 50) + " ... " + commandLine.substring(commandLine.length() - 50); } setToolTipText(commandLine); } else { setToolTipText(((Process) o).getName()); } } else if (o instanceof String) { String s = (String) o; if (s.equals(TreePanel.ROOT_NAME)) { setIcon(Styles.REPORT_ICON); setToolTipText(null); } else if (s.equals("TOP")) { setIcon(DATASUBTYPE_ICON); setToolTipText("Top Processes"); } else if (s.equals("Process")) { setIcon(DATASUBTYPE_ICON); setToolTipText("Processes"); } else if (s.equals("GC")) { setIcon(DATASUBTYPE_ICON); setToolTipText("Garbage Collection"); } else { DefaultMutableTreeNode parent = (DefaultMutableTreeNode) ((DefaultMutableTreeNode) value).getParent(); if (parent.getUserObject() instanceof DataSet) { // sub data type setIcon(DATASUBTYPE_ICON); // set tool tip the same as the first child setToolTipText(s); } else { String p = parent.toString(); if (p.equals("TOP")) { setIcon(DATATYPE_ICON); } if (p.equals("Process")) { setIcon(DATATYPE_ICON); } else if (p.equals("GC")) { setIcon(DATATYPE_ICON); } else { setIcon(FIELD_ICON); } setToolTipText(null); } } } return this; } }