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    }