1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.testcase;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.awt.event.ActionEvent;
18 import java.awt.event.MouseAdapter;
19 import java.awt.event.MouseEvent;
20
21 import javax.swing.BorderFactory;
22 import javax.swing.JLabel;
23 import javax.swing.JList;
24 import javax.swing.JPanel;
25 import javax.swing.JPopupMenu;
26 import javax.swing.JScrollPane;
27 import javax.swing.ListCellRenderer;
28
29 import com.eviware.soapui.impl.wsdl.testcase.TestCaseLogItem;
30 import com.eviware.soapui.impl.wsdl.testcase.TestCaseLogModel;
31 import com.eviware.soapui.model.testsuite.TestStepResult;
32 import com.eviware.soapui.support.UISupport;
33 import com.eviware.soapui.support.action.swing.ActionList;
34 import com.eviware.soapui.support.action.swing.ActionSupport;
35
36 /***
37 * Panel for displaying TestStepResults
38 *
39 * @author Ole.Matzura
40 */
41
42 public class TestCaseLog extends JPanel
43 {
44 private TestCaseLogModel logListModel;
45 private JList testLogList;
46
47 public TestCaseLog()
48 {
49 super(new BorderLayout());
50
51 buildUI();
52 }
53
54 private void buildUI()
55 {
56 logListModel = new TestCaseLogModel();
57 testLogList = new JList(logListModel);
58 testLogList.setCellRenderer(new TestLogCellRenderer());
59 testLogList.setPrototypeCellValue( "Testing 123" );
60 testLogList.setFixedCellWidth( -1 );
61 testLogList.addMouseListener(new LogListMouseListener());
62
63
64 JScrollPane scrollPane = new JScrollPane(testLogList);
65
66 add(scrollPane, BorderLayout.CENTER);
67 }
68
69 private static final class TestLogCellRenderer extends JLabel implements ListCellRenderer
70 {
71 public TestLogCellRenderer()
72 {
73 setOpaque(true);
74 setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
75 setIcon(null);
76 }
77
78 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
79 boolean cellHasFocus)
80 {
81 if (value instanceof String)
82 {
83 setText(value.toString());
84 }
85 else if (value instanceof TestCaseLogItem)
86 {
87 TestCaseLogItem logItem = (TestCaseLogItem) value;
88 String msg = logItem.getMsg();
89 setText(msg == null ? "" : msg);
90 }
91
92 if (isSelected)
93 {
94 setBackground(list.getSelectionBackground());
95 setForeground(list.getSelectionForeground());
96 }
97 else
98 {
99 setBackground(list.getBackground());
100 setForeground(list.getForeground());
101 }
102
103 setEnabled(list.isEnabled());
104
105
106 return this;
107 }
108 }
109
110 /***
111 * Mouse Listener for triggering default action and showing popup for log list items
112 *
113 * @author Ole.Matzura
114 */
115
116 private final class LogListMouseListener extends MouseAdapter
117 {
118 public void mouseClicked(MouseEvent e)
119 {
120 if (e.getClickCount() < 2)
121 return;
122 int selectedIndex = testLogList.getSelectedIndex();
123 if (selectedIndex == -1)
124 return;
125 TestStepResult result = logListModel.getResultAt(selectedIndex);
126 if (result != null && result.getActions() != null)
127 result.getActions().performDefaultAction(new ActionEvent(this, 0, null));
128 }
129
130 public void mousePressed(MouseEvent e)
131 {
132 if (e.isPopupTrigger())
133 showPopup(e);
134 }
135
136 public void mouseReleased(MouseEvent e)
137 {
138 if (e.isPopupTrigger())
139 showPopup(e);
140 }
141
142 public void showPopup(MouseEvent e)
143 {
144 int row = testLogList.locationToIndex(e.getPoint());
145 if (row == -1)
146 return;
147
148 if (testLogList.getSelectedIndex() != row)
149 {
150 testLogList.setSelectedIndex(row);
151 }
152
153 TestStepResult result = logListModel.getResultAt(row);
154 if (result == null)
155 return;
156
157 ActionList actions = result.getActions();
158
159 if (actions == null || actions.getActionCount() == 0)
160 return;
161
162 JPopupMenu popup = ActionSupport.buildPopup(actions);
163 UISupport.showPopup(popup, testLogList, e.getPoint());
164 }
165 }
166
167 public void clear()
168 {
169 logListModel.clear();
170 }
171
172 public void addText(String string)
173 {
174 logListModel.addText( string );
175 }
176
177 public void addTestStepResult(TestStepResult stepResult)
178 {
179 logListModel.addTestStepResult( stepResult );
180 }
181
182 public TestCaseLogModel getLogListModel()
183 {
184 return logListModel;
185 }
186
187 public void setLogListModel(TestCaseLogModel logListModel)
188 {
189 this.logListModel = logListModel;
190 testLogList.setModel( logListModel );
191 }
192 }