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}