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.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
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.JToolBar;
23 import javax.swing.ListModel;
24
25 import com.eviware.soapui.SoapUI;
26 import com.eviware.soapui.impl.wsdl.panels.request.AbstractWsdlRequestDesktopPanel;
27 import com.eviware.soapui.impl.wsdl.panels.request.components.SoapMessageXmlEditor;
28 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
29 import com.eviware.soapui.impl.wsdl.support.assertions.Assertable.AssertionStatus;
30 import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
31 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
32 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep;
33 import com.eviware.soapui.impl.wsdl.teststeps.actions.AddAssertionAction;
34 import com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError;
35 import com.eviware.soapui.model.ModelItem;
36 import com.eviware.soapui.model.iface.Submit;
37 import com.eviware.soapui.model.iface.SubmitContext;
38 import com.eviware.soapui.model.iface.Request.SubmitException;
39 import com.eviware.soapui.model.testsuite.LoadTestRunner;
40 import com.eviware.soapui.model.testsuite.TestRunner;
41 import com.eviware.soapui.monitor.support.TestMonitorListenerAdapter;
42 import com.eviware.soapui.support.ListDataChangeListener;
43 import com.eviware.soapui.support.UISupport;
44 import com.eviware.soapui.support.components.JComponentInspector;
45 import com.eviware.soapui.support.components.JInspectorPanel;
46 import com.eviware.soapui.support.log.JLogList;
47
48 /***
49 * DesktopPanel for WsdlTestRequest. Essentially a copy of WsdlRequestDesktopPanel with assertions.
50 *
51 * @author Ole.Matzura
52 */
53
54 public class WsdlTestRequestDesktopPanel extends AbstractWsdlRequestDesktopPanel<WsdlTestRequestStep, WsdlTestRequest> implements PropertyChangeListener
55 {
56 private JLogList logArea;
57 private InternalTestMonitorListener testMonitorListener = new InternalTestMonitorListener();
58 private JButton addAssertionButton;
59 protected boolean updatingRequest;
60 private WsdlTestRequestDesktopPanel.InternalSubmitListener submitListener;
61 private AssertionsPanel assertionsPanel;
62 private JInspectorPanel inspectorPanel;
63 private JComponentInspector assertionInspector;
64 private JComponentInspector logInspector;
65
66 public WsdlTestRequestDesktopPanel( WsdlTestRequestStep requestStep )
67 {
68 super( requestStep );
69
70 init( requestStep.getTestRequest() );
71
72 SoapUI.getTestMonitor().addTestMonitorListener( testMonitorListener );
73 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( requestStep.getTestCase() ) );
74
75 requestStep.getTestRequest().addPropertyChangeListener( WsdlTestRequest.STATUS_PROPERTY, this );
76 }
77
78 protected JComponent buildLogPanel()
79 {
80 logArea = new JLogList("Request Log");
81
82 logArea.getLogList().getModel().addListDataListener( new ListDataChangeListener() {
83
84 public void dataChanged( ListModel model )
85 {
86 logInspector.setTitle( "Request Log (" + model.getSize() + ")" );
87 }}
88 );
89
90 return logArea;
91 }
92
93 protected AssertionsPanel buildAssertionsPanel()
94 {
95 return new AssertionsPanel( getRequest() )
96 {
97 protected void selectError(AssertionError error)
98 {
99 SoapMessageXmlEditor editor = getResponseEditor();
100 editor.requestFocus();
101 }
102 };
103 }
104
105 public void setContent(JComponent content)
106 {
107 inspectorPanel.setContentComponent( content );
108 }
109
110 public void removeContent(JComponent content)
111 {
112 inspectorPanel.setContentComponent( null );
113 }
114
115 protected String getHelpUrl()
116 {
117 return HelpUrls.TESTREQUESTEDITOR_HELP_URL;
118 }
119
120 protected JComponent buildContent()
121 {
122 JComponent component = super.buildContent();
123
124 inspectorPanel = new JInspectorPanel( component );
125 assertionsPanel = buildAssertionsPanel();
126 assertionInspector = inspectorPanel.addInspector( new JComponentInspector( assertionsPanel, "Assertions",
127 "Assertions for this Test Request", true) );
128
129 logInspector = new JComponentInspector( buildLogPanel(), "Request Log (0)", "Log of requests", true);
130 inspectorPanel.addInspector( logInspector );
131 inspectorPanel.setDefaultDividerLocation( 0.6F );
132 inspectorPanel.setCurrentInspector( "Assertions" );
133
134 updateStatusIcon();
135
136 return inspectorPanel;
137 }
138
139 private void updateStatusIcon()
140 {
141 AssertionStatus status = getModelItem().getTestRequest().getAssertionStatus();
142 switch( status )
143 {
144 case FAILED :
145 {
146 assertionInspector.setIcon( UISupport.createImageIcon( "/failed_assertion.gif" ));
147 inspectorPanel.activate( assertionInspector );
148 break;
149 }
150 case UNKNOWN :
151 {
152 assertionInspector.setIcon( UISupport.createImageIcon( "/unknown_assertion.gif" ));
153 break;
154 }
155 case VALID :
156 {
157 assertionInspector.setIcon( UISupport.createImageIcon( "/valid_assertion.gif" ));
158 inspectorPanel.deactivate();
159 break;
160 }
161 }
162 }
163
164 protected JComponent buildToolbar()
165 {
166 addAssertionButton = createActionButton(new AddAssertionAction(getRequest()), true );
167 return super.buildToolbar();
168 }
169
170 protected void insertButtons(JToolBar toolbar)
171 {
172 toolbar.add( addAssertionButton );
173 }
174
175 public void setEnabled( boolean enabled )
176 {
177 if( enabled == true )
178 enabled = !SoapUI.getTestMonitor().hasRunningLoadTest( getModelItem().getTestCase() );
179
180 super.setEnabled( enabled );
181 addAssertionButton.setEnabled( enabled );
182 assertionsPanel.setEnabled( enabled );
183
184 if( SoapUI.getTestMonitor().hasRunningLoadTest( getRequest().getTestCase() ))
185 {
186 getRequest().removeSubmitListener( submitListener );
187 }
188 else
189 {
190 getRequest().addSubmitListener( submitListener );
191 }
192 }
193
194 protected Submit doSubmit() throws SubmitException
195 {
196 return getRequest().submit( new WsdlTestRunContext(getModelItem()), true );
197 }
198
199 protected InternalSubmitListener createSubmitListener()
200 {
201 submitListener = new InternalSubmitListener();
202 return submitListener;
203 }
204
205 private class InternalSubmitListener extends AbstractWsdlRequestDesktopPanel.InternalSubmitListener
206 {
207 private long startTime;
208 private SimpleDateFormat sdf;
209
210 private InternalSubmitListener()
211 {
212 super();
213 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
214 }
215
216 public boolean beforeSubmit(Submit submit, SubmitContext context)
217 {
218 boolean result = super.beforeSubmit( submit, context );
219 startTime = System.currentTimeMillis();
220 return result;
221 }
222
223 protected void logMessages(String message, String infoMessage)
224 {
225 super.logMessages( message, infoMessage );
226 logArea.addLine( sdf.format( new Date( startTime )) + " - " + message );
227 }
228
229 @Override
230 public void afterSubmit( Submit submit, SubmitContext context )
231 {
232 super.afterSubmit( submit, context );
233 updateStatusIcon();
234 }
235 }
236
237 public boolean onClose( boolean canCancel )
238 {
239 if( super.onClose( canCancel ))
240 {
241 assertionsPanel.release();
242 SoapUI.getTestMonitor().removeTestMonitorListener( testMonitorListener );
243 logArea.release();
244 getModelItem().getTestRequest().removePropertyChangeListener( WsdlTestRequest.STATUS_PROPERTY, this );
245 return true;
246 }
247
248
249 return false;
250 }
251
252 public boolean dependsOn(ModelItem modelItem)
253 {
254 return modelItem == getRequest() || modelItem == getModelItem() || modelItem == getRequest().getOperation() ||
255 modelItem == getRequest().getOperation().getInterface() ||
256 modelItem == getRequest().getOperation().getInterface().getProject() ||
257 modelItem == getModelItem().getTestCase() || modelItem == getModelItem().getTestCase().getTestSuite();
258 }
259
260 private class InternalTestMonitorListener extends TestMonitorListenerAdapter
261 {
262 public void loadTestFinished(LoadTestRunner runner)
263 {
264 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( getModelItem().getTestCase() ) );
265 }
266
267 public void loadTestStarted(LoadTestRunner runner)
268 {
269 if( runner.getLoadTest().getTestCase() == getModelItem().getTestCase() )
270 setEnabled( false );
271 }
272
273 public void testCaseFinished(TestRunner runner)
274 {
275 setEnabled( !SoapUI.getTestMonitor().hasRunningTest( getModelItem().getTestCase() ) );
276 }
277
278 public void testCaseStarted(TestRunner runner)
279 {
280 if( runner.getTestCase() == getModelItem().getTestCase())
281 setEnabled( false );
282 }
283 }
284
285 public void propertyChange( PropertyChangeEvent evt )
286 {
287 updateStatusIcon();
288 }
289 }