1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.teststeps;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.text.SimpleDateFormat;
18 import java.util.Date;
19
20 import javax.swing.JButton;
21 import javax.swing.JComponent;
22 import javax.swing.JPanel;
23 import javax.swing.JSplitPane;
24 import javax.swing.JTabbedPane;
25 import javax.swing.JToolBar;
26
27 import com.eviware.soapui.SoapUI;
28 import com.eviware.soapui.impl.wsdl.panels.request.AbstractWsdlRequestDesktopPanel;
29 import com.eviware.soapui.impl.wsdl.panels.request.components.SoapMessageXmlEditor;
30 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
31 import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
32 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
33 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep;
34 import com.eviware.soapui.impl.wsdl.teststeps.actions.AddAssertionAction;
35 import com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError;
36 import com.eviware.soapui.model.ModelItem;
37 import com.eviware.soapui.model.iface.Submit;
38 import com.eviware.soapui.model.iface.SubmitContext;
39 import com.eviware.soapui.model.iface.Request.SubmitException;
40 import com.eviware.soapui.model.testsuite.LoadTestRunner;
41 import com.eviware.soapui.model.testsuite.TestRunner;
42 import com.eviware.soapui.monitor.support.TestMonitorListenerAdapter;
43 import com.eviware.soapui.support.UISupport;
44 import com.eviware.soapui.support.log.JLogList;
45
46 /***
47 * DesktopPanel for WsdlTestRequest. Essentially a copy of WsdlRequestDesktopPanel with assertions.
48 *
49 * @author Ole.Matzura
50 */
51
52 public class WsdlTestRequestDesktopPanel extends AbstractWsdlRequestDesktopPanel<WsdlTestRequestStep, WsdlTestRequest>
53 {
54 private JLogList logArea;
55 private InternalTestMonitorListener testMonitorListener = new InternalTestMonitorListener();
56 private JButton addAssertionButton;
57 protected boolean updatingRequest;
58 private WsdlTestRequestDesktopPanel.InternalSubmitListener submitListener;
59 private AssertionsPanel assertionsPanel;
60 private JSplitPane outerSplit;
61
62 public WsdlTestRequestDesktopPanel( WsdlTestRequestStep requestStep )
63 {
64 super( requestStep );
65
66 init( requestStep.getTestRequest() );
67
68 SoapUI.getTestMonitor().addTestMonitorListener( testMonitorListener );
69 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( requestStep.getTestCase() ) );
70 }
71
72 private Component buildLogPanel()
73 {
74 JTabbedPane tabbedPane = new JTabbedPane( JTabbedPane.RIGHT );
75 tabbedPane.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT );
76
77 logArea = new JLogList("Request Log");
78
79 JPanel panel = new JPanel(new BorderLayout());
80 panel.add(logArea, BorderLayout.CENTER);
81
82 tabbedPane.addTab( "Assertions", buildAssertionsPanel() );
83 tabbedPane.addTab( "Request Log", panel );
84 return UISupport.createTabPanel( tabbedPane, true );
85 }
86
87 private Component buildAssertionsPanel()
88 {
89 assertionsPanel = new AssertionsPanel( getRequest() )
90 {
91 protected void selectError(AssertionError error)
92 {
93 SoapMessageXmlEditor editor = getResponseEditor();
94 editor.requestFocus();
95 }
96 };
97
98 return assertionsPanel;
99 }
100
101 public void setContent(JComponent content)
102 {
103 outerSplit.setTopComponent( content );
104 }
105
106 public void removeContent(JComponent content)
107 {
108 outerSplit.setTopComponent( null );
109 }
110
111 protected String getHelpUrl()
112 {
113 return HelpUrls.TESTREQUESTEDITOR_HELP_URL;
114 }
115
116 protected JComponent buildContent()
117 {
118 JComponent component = super.buildContent();
119
120 outerSplit = UISupport.createVerticalSplit();
121 outerSplit.setTopComponent( component );
122 outerSplit.setBottomComponent( buildLogPanel() );
123 outerSplit.setDividerLocation( 350 );
124 outerSplit.setResizeWeight( 0.9 );
125 outerSplit.setBorder( null );
126
127 return outerSplit;
128 }
129
130 protected SoapMessageXmlEditor buildRequestEditor()
131 {
132 SoapMessageXmlEditor editor = super.buildRequestEditor();
133 return editor;
134 }
135
136 protected SoapMessageXmlEditor buildResponseEditor()
137 {
138 SoapMessageXmlEditor editor = super.buildResponseEditor();
139 return editor;
140 }
141
142 protected JComponent buildToolbar()
143 {
144 addAssertionButton = createActionButton(new AddAssertionAction(getRequest()), true );
145 return super.buildToolbar();
146 }
147
148 protected void insertButtons(JToolBar toolbar)
149 {
150 toolbar.add( addAssertionButton );
151 }
152
153 public void setEnabled( boolean enabled )
154 {
155 if( enabled == true )
156 enabled = !SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem().getTestCase() );
157
158 super.setEnabled( enabled );
159 addAssertionButton.setEnabled( enabled );
160 assertionsPanel.setEnabled( enabled );
161
162 if( SoapUI.getTestMonitor().hasRunningLoadTest( getRequest().getTestCase() ))
163 {
164 getRequest().removeSubmitListener( submitListener );
165 }
166 else
167 {
168 getRequest().addSubmitListener( submitListener );
169 }
170 }
171
172 protected Submit doSubmit() throws SubmitException
173 {
174 return getRequest().submit( new WsdlTestRunContext(getModelItem()), true );
175 }
176
177 protected InternalSubmitListener createSubmitListener()
178 {
179 submitListener = new InternalSubmitListener();
180 return submitListener;
181 }
182
183 private class InternalSubmitListener extends AbstractWsdlRequestDesktopPanel.InternalSubmitListener
184 {
185 private long startTime;
186 private SimpleDateFormat sdf;
187
188 private InternalSubmitListener()
189 {
190 super();
191 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
192 }
193
194 public boolean beforeSubmit(Submit submit, SubmitContext context)
195 {
196 boolean result = super.beforeSubmit( submit, context );
197 startTime = System.currentTimeMillis();
198 return result;
199 }
200
201 protected void logMessages(String message, String infoMessage)
202 {
203 super.logMessages( message, infoMessage );
204 logArea.addLine( sdf.format( new Date( startTime )) + " - " + message );
205 }
206 }
207
208 public boolean onClose( boolean canCancel )
209 {
210 if( super.onClose( canCancel ))
211 {
212 assertionsPanel.release();
213 SoapUI.getTestMonitor().removeTestMonitorListener( testMonitorListener );
214
215 return true;
216 }
217
218 return false;
219 }
220
221 public boolean dependsOn(ModelItem modelItem)
222 {
223 return modelItem == getRequest() || modelItem == getModelItem() || modelItem == getRequest().getOperation() ||
224 modelItem == getRequest().getOperation().getInterface() ||
225 modelItem == getRequest().getOperation().getInterface().getProject() ||
226 modelItem == getModelItem().getTestCase() || modelItem == getModelItem().getTestCase().getTestSuite();
227 }
228
229 private class InternalTestMonitorListener extends TestMonitorListenerAdapter
230 {
231 public void loadTestFinished(LoadTestRunner runner)
232 {
233 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( getModelItem().getTestCase() ) );
234 }
235
236 public void loadTestStarted(LoadTestRunner runner)
237 {
238 if( runner.getLoadTest().getTestCase() == getModelItem().getTestCase() )
239 setEnabled( false );
240 }
241
242 public void testCaseFinished(TestRunner runner)
243 {
244 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( getModelItem().getTestCase() ) );
245 }
246
247 public void testCaseStarted(TestRunner runner)
248 {
249 if( runner.getTestCase() == getModelItem().getTestCase())
250 setEnabled( false );
251 }
252 }
253
254 @Override
255 public String getDescription()
256 {
257 return "TestRequest: [" + getModelItem().getName() + "] - " + getModelItem().getTestStepTitle();
258 }
259
260 public String getTitle()
261 {
262 return getModelItem().getTestCase().getName() + " - " + getModelItem().getName() +
263 " (" + getModelItem().getTestRequest().getOperation().getName() + ")";
264 }
265 }