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 }