001    package org.shiftone.jrat.provider.tree.ui.trace;
002    
003    
004    import org.jdesktop.swingx.JXTable;
005    import org.shiftone.jrat.desktop.util.JXTableWatcher;
006    import org.shiftone.jrat.provider.tree.ui.TraceTreeNode;
007    import org.shiftone.jrat.provider.tree.ui.trace.stack.StackTableModel;
008    import org.shiftone.jrat.ui.util.PercentTableCellRenderer;
009    import org.shiftone.jrat.util.Assert;
010    
011    import javax.swing.*;
012    import java.awt.*;
013    import java.util.prefs.Preferences;
014    
015    
016    public class NodeDetailPanel extends JPanel {
017    
018        private StackTableModel stackTableModel = null;
019        private JLabel methodLabel;
020    
021        public NodeDetailPanel() {
022    
023    
024            methodLabel = new JLabel();
025    
026            // ----- [ Stack ] -----
027            stackTableModel = new StackTableModel();
028            JXTable stackTable = new JXTable(stackTableModel);
029            stackTable.setColumnControlVisible(true);
030            stackTable.setSortable(false);
031    
032            JXTableWatcher.initialize(
033                    stackTable,
034                    Preferences.userNodeForPackage(NodeDetailPanel.class).node("columns"),
035                    StackTableModel.getColumns());
036    
037            PercentTableCellRenderer.setDefaultRenderer(stackTable);
038    
039            setLayout(new BorderLayout());
040            add(new JScrollPane(stackTable), BorderLayout.CENTER);
041            add(methodLabel, BorderLayout.NORTH);
042        }
043    
044    
045        public synchronized void setStackTreeNode(TraceTreeNode root, TraceTreeNode node) {
046    
047            Assert.assertNotNull("root", root);
048            Assert.assertNotNull("node", node);
049    
050            if (node.isRootNode()) {
051                methodLabel.setText("");
052            } else {
053                methodLabel.setText(" " + node.getMethodKey().getShortMethodDescription());
054            }
055    
056            stackTableModel.setStackTreeNode(root, node);
057        }
058    }