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.CommandException; 019import com.ganteater.ae.desktop.editor.TaskEditor; 020import com.ganteater.ae.processor.Processor; 021import com.ganteater.ae.util.xml.easyparser.Node; 022import com.ganteater.ae.util.xml.easyparser.Node.TreeVector; 023 024class TracePanel extends JPanel { 025 026 private static final long serialVersionUID = 1L; 027 028 public TracePanel(AEFrame frame, Processor processor, Throwable e, Node command) { 029 super(new BorderLayout()); 030 031 String message = ExceptionUtils.getRootCauseMessage(e); 032 if (message == null) { 033 message = ExceptionUtils.getRootCause(e).getClass().getSimpleName(); 034 } 035 JTextArea theJTextArea = new JTextArea(message); 036 theJTextArea.setEditable(false); 037 JScrollPane scrollPane = new JScrollPane(theJTextArea); 038 039 TreeVector taskTree = new TreeVector(); 040 taskTree.add(command.getVector()); 041 JTree theTask = new JTree(taskTree); 042 theTask.setRootVisible(false); 043 JSplitPane theStackPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, new JScrollPane(theTask)); 044 theStackPanel.setDividerLocation(40); 045 046 Vector<Object> callTaskTrace = processor.getCallTaskTrace(); 047 JTree jTree = new JTree(callTaskTrace); 048 049 jTree.addMouseListener(new MouseAdapter() { 050 @Override 051 public void mousePressed(MouseEvent e) { 052 if (e.getClickCount() == 2) { 053 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent(); 054 Node node = (Node) selectedNode.getUserObject(); 055 056 String name = node.getAttribute("recipe"); 057 if (name != null) { 058 TaskEditor editTask; 059 try { 060 editTask = frame.editTask(name); 061 editTask.setRunButtonAction(true); 062 } catch (CommandException e1) { 063 // TODO Auto-generated catch block 064 e1.printStackTrace(); 065 } 066 } 067 } 068 } 069 }); 070 071 jTree.setRootVisible(false); 072 JSplitPane panel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, theStackPanel, new JScrollPane(jTree)); 073 panel.setDividerLocation(160); 074 075 add(panel, BorderLayout.CENTER); 076 setPreferredSize(new Dimension(400, 300)); 077 } 078}