001 package org.shiftone.jrat.provider.tree.ui.graph; 002 003 import org.shiftone.jrat.core.MethodKey; 004 import org.shiftone.jrat.provider.tree.TreeNode; 005 import org.shiftone.jrat.util.log.Logger; 006 007 import javax.swing.*; 008 import java.awt.*; 009 import java.awt.event.ActionEvent; 010 import java.awt.event.ActionListener; 011 import java.awt.event.ComponentAdapter; 012 import java.awt.event.ComponentEvent; 013 import java.util.HashMap; 014 import java.util.List; 015 import java.util.Map; 016 017 /** 018 * @author jeff@shiftone.org (Jeff Drost) 019 */ 020 public class GraphViewPanel extends JPanel implements ActionListener { 021 private static final Logger LOG = Logger.getLogger(GraphViewPanel.class); 022 private TreeNode rootNode; 023 private JButton button = new JButton("push me"); 024 025 public GraphViewPanel(TreeNode rootNode) { 026 this.rootNode = rootNode; 027 addComponentListener(new ComponentListener()); 028 setLayout(new BorderLayout()); 029 add(button, BorderLayout.NORTH); 030 button.addActionListener(this); 031 032 } 033 034 035 public void actionPerformed(ActionEvent e) { 036 Map map = new HashMap(); 037 processTree(rootNode, map); 038 } 039 040 private void processTree(TreeNode node, Map nodes) { 041 List children = node.getChildren(); 042 for (int i = 0; i < children.size(); i++) { 043 TreeNode child = (TreeNode) children.get(i); 044 processNode(child, nodes); 045 processTree(child, nodes); 046 } 047 } 048 049 private void processNode(TreeNode treeNode, Map nodes) { 050 MethodKey methodKey = treeNode.getMethodKey(); 051 GraphNode graphNode = getGraphNode(methodKey, nodes); 052 053 List children = treeNode.getChildren(); 054 for (int i = 0; i < children.size(); i++) { 055 TreeNode child = (TreeNode) children.get(i); 056 GraphNode childGraphNode = getGraphNode(child.getMethodKey(), nodes); 057 058 graphNode.addCalled(childGraphNode); 059 childGraphNode.addCalledBy(graphNode); 060 } 061 062 graphNode.addStackNode(treeNode); 063 } 064 065 private GraphNode getGraphNode(MethodKey methodKey, Map nodes) { 066 GraphNode node = (GraphNode) nodes.get(methodKey); 067 if (node == null) { 068 node = new GraphNode(methodKey); 069 nodes.put(methodKey, node); 070 } 071 return node; 072 } 073 074 private class ComponentListener extends ComponentAdapter { 075 076 077 public void componentShown(ComponentEvent e) { 078 LOG.info("componentShown"); 079 } 080 081 public void componentHidden(ComponentEvent e) { 082 LOG.info("componentHidden"); 083 } 084 } 085 }