001package com.ganteater.ae.desktop.ui;
002
003import java.awt.BorderLayout;
004import java.awt.Dimension;
005import java.awt.event.MouseAdapter;
006import java.awt.event.MouseEvent;
007import java.util.Vector;
008
009import javax.swing.JPanel;
010import javax.swing.JScrollPane;
011import javax.swing.JSplitPane;
012import javax.swing.JTextArea;
013import javax.swing.JTree;
014import javax.swing.tree.DefaultMutableTreeNode;
015
016import org.apache.commons.lang.exception.ExceptionUtils;
017
018import com.ganteater.ae.desktop.editor.TaskEditor;
019import com.ganteater.ae.processor.Processor;
020import com.ganteater.ae.util.xml.easyparser.Node;
021import com.ganteater.ae.util.xml.easyparser.Node.TreeVector;
022
023class TracePanel extends JPanel {
024
025        private static final long serialVersionUID = 1L;
026
027        public TracePanel(AEFrame frame, Processor processor, Throwable e, Node command) {
028                super(new BorderLayout());
029
030                String message = ExceptionUtils.getRootCauseMessage(e);
031                if (message == null) {
032                        message = ExceptionUtils.getRootCause(e).getClass().getSimpleName();
033                }
034                JTextArea theJTextArea = new JTextArea(message);
035                theJTextArea.setEditable(false);
036                JScrollPane scrollPane = new JScrollPane(theJTextArea);
037
038                TreeVector taskTree = new TreeVector();
039                taskTree.add(command.getVector());
040                JTree theTask = new JTree(taskTree);
041                theTask.setRootVisible(false);
042                JSplitPane theStackPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, new JScrollPane(theTask));
043                theStackPanel.setDividerLocation(40);
044
045                Vector<Object> callTaskTrace = processor.getCallTaskTrace();
046                JTree jTree = new JTree(callTaskTrace);
047
048                jTree.addMouseListener(new MouseAdapter() {
049                        @Override
050                        public void mousePressed(MouseEvent e) {
051                                if (e.getClickCount() == 2) {
052                                        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
053                                        Node node = (Node) selectedNode.getUserObject();
054
055                                        String name = node.getAttribute("recipe");
056                                        if (name != null) {
057                                                TaskEditor editTask = frame.editTask(name);
058                                                editTask.setRunButtonAction(true);
059                                        }
060                                }
061                        }
062                });
063
064                jTree.setRootVisible(false);
065                JSplitPane panel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, theStackPanel, new JScrollPane(jTree));
066                panel.setDividerLocation(160);
067
068                add(panel, BorderLayout.CENTER);
069                setPreferredSize(new Dimension(400, 300));
070        }
071}